我已经使用 Spring Boot 安全性设置了一个 OAuth2 身份验证服务器,并且一切正常。我接下来要做的是创建一个超级用户,该超级用户只需一个基本的 auth 标头即可将请求发送到每个端点,而不会影响其他用户的身份验证流程。这可能与 Spring Boot 安全性有关吗?
谢谢,克里斯
是的,有可能。
一种选择是使用 ROLES,因此您可以选择使用 @Secured 注释访问每个端点的用户。
其他选项包括实现您自己的过滤器以在请求之前运行。这是一个使用 JWT 令牌过滤器和验证的简单示例:
public class JWTConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
@Override
public void configure(HttpSecurity http) {
JWTFilter customFilter = new JWTFilter();
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
}
}
public class JWTFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// Here go your implementation
String jwt = resolveToken(httpServletRequest);
if (isTokenValid(jwt)) {
Authentication authentication = getAuthenticationFromToken(jwt);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterChain.doFilter(servletRequest, servletResponse);
}
private String resolveToken(HttpServletRequest request) {
String bearerToken = request.getHeader("YOUR-AUTHORIZATION-HEADER");
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7, bearerToken.length());
}
return null;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句