【发布时间】:2020-08-18 23:40:48
【问题描述】:
我想配置服务器以使用 JWT 使用用户名和密码进行身份验证。我想只允许公开允许 sign-up 端点,其他端点需要登录。但显然注册端点仍然进入 JWTAuthenticationFilter 并返回 200 没有任何操作. 对于其余端点,它返回 403,而我期望 401。 下面是httpSecurity的配置:
private static final String SIGN_UP_URL = "/users/sign-up";
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable().authorizeRequests()
.antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
JWTAuthenticationFilter 扩展了 UsernamePasswordAuthenticationFilter
JWTAuthorizationFilter 扩展了 BasicAuthenticationFilter
编辑:这就是我的发布请求的样子:
@PostMapping("/sign-up")
public ResponseEntity<AddUserResult> signUp(@RequestBody AddUserCommand command) {
return new ResponseEntity<>(bus.executeCommand(command), HttpStatus.CREATED);
}
【问题讨论】:
-
加载时注册 URL 是获取请求吗?
-
这是一个post请求
-
你试过我发布的解决方案了吗
-
最终我决定使用基本身份验证和 https,因此我不再使用 JWT。
标签: java spring spring-boot spring-security