gpt4 book ai didi

java - 忽略了 Spring 安全身份验证过滤器 url

转载 作者:行者123 更新时间:2023-11-30 10:42:23 25 4
gpt4 key购买 nike

我想要完成的是为我的 rest api 进行基于 jwt token 的身份验证。/api 下的所有内容都只能使用 token 访问。

我的网络安全配置中有以下配置方法:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authenticationProvider(authenticationProvider())
.csrf().disable()
.authorizeRequests().antMatchers("/api/**").authenticated()
.and()
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPoint())
.and()
.addFilterBefore(authenticationFilter(),BasicAuthenticationFilter.class)
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}

这是过滤器:

public class JwtAuthenticationFilter extends AbstractAuthenticationProcessingFilter {

public JwtAuthenticationFilter(AuthenticationManager manager) {
super("/api/**");
this.setAuthenticationManager(manager);
}

@Override
protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) {
return true;
}

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {

String header = request.getHeader("Authorization");

if (header == null || !header.startsWith("Bearer ")) {
throw new JwtTokenMissingException("No JWT token found in request headers");
}

String authToken = header.substring(7);

JwtAuthenticationToken authRequest = new JwtAuthenticationToken(authToken);

return getAuthenticationManager().authenticate(authRequest);
}

@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult)
throws IOException, ServletException {
super.successfulAuthentication(request, response, chain, authResult);
chain.doFilter(request, response);
}
}

我的问题是过滤器现在应用于每个 url,而不仅仅是带有/api 前缀的 url。

我知道我的“配置”方法可能有误,但它应该是什么样的呢?我想要完成的就是对/api 路径使用过滤器。

+1 问题:为什么有两个值来配置应用过滤器的路径? (一次作为配置中 antMatchers 方法的参数,然后是 AbstractAuthenticationProcessingFilter 的构造函数参数“filterProcessesUrl”)。这些值如何相互关联,我应该使用哪一个?

最佳答案

问题出在这部分:

@Override
protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) {
return true;
}

我复制了它,但从未意识到它在那里。

关于java - 忽略了 Spring 安全身份验证过滤器 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com