【发布时间】:2019-04-26 16:10:21
【问题描述】:
我正在尝试实现 JWT。我有两个端点:/api/auth/signin 用于身份验证,返回生成的 JWT 令牌,/api/auth/me 应该根据标头中的 JWT 令牌返回用户。我正在尝试将 Spring Security 配置为只有授权用户才能访问/api**,我需要排除/api/auth/signin
这是扩展 WebSecurityConfigurerAdapter 的类中的 configure() 方法:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api**")
.httpBasic().disable()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/auth/signin").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(jwtAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class);
}
但它仍然为/api/auth/signin 调用 JwtAuthorizationFilter。我还尝试通过以下方式忽略此端点:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(HttpMethod.POST,"/api/auth/signin");
}
有没有其他方法可以忽略它,或者permitAll() 和ignoring() 应该以不同的方式使用?
【问题讨论】:
-
您确定在调用 /api/auth/signin 端点时使用 POST 请求吗?此外,登录端点是否有可能将您重定向到另一个端点?并且在重定向期间调用过滤器?
-
@Selindek,是的,使用了 POST 请求。但即使我删除了 HttpMethod.POST,它仍然会调用 JwtAuthorizationFilter。而且它不会重定向到另一个端点。
-
UsernamePasswordAuthenticationFilter 是否在 JWT 过滤器之前介入?
-
@RahulVedpathak,不,此过滤器在 JWT 过滤器之前不参与
-
我认为你应该使用 AuthenticationServerConfiguration 和 ResourceServerConfiguration 而不是手动配置 JWT。
标签: java spring-security