在我的spring boot应用程序中,我使用google进行基于表单的登录和基于oauth2.0的登录,我的安全配置定义为
http
.cors()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf().disable()
.authorizeRequests()
.antMatchers("/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(jwtAuthorizationFilter)
.formLogin()
.and()
.oauth2Login()
.authorizationEndpoint()
.authorizationRequestRepository(httpCookieOAuth2AuthorizationRequestRepository)
.and()
.userInfoEndpoint()
.userService(customOAuth2UserService)
.and()
.successHandler(oAuth2AuthenticationSuccessHandler)
.failureHandler(oAuth2AuthenticationFailureHandler);
我正在用jwt进行无状态身份验证,用于基于表单的登录 JWTAuthenticationFilter
按如下方式处理身份验证。
jwtauthenticationfilter
public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
//code to authenticate user and generate JWT
}
及 JWTAuthorizationFilter
验证jwt的后续请求,如下所示。
JWT授权过滤器
public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
// code to perform authorization
}
现在来看oauth2.0 customOAuth2UserService
注册新用户并更新现有用户信息。 OAuth2AuthenticationSuccessHandler
在oauth2.0身份验证成功时生成jwt。现在,表单登录和oauth2.0的功能都很好,但我正在尝试解决一些需要帮助的小问题。
问题
如果我击中 http://localhost:8080/login
使用错误的表单登录凭据,我得到了一个以google登录作为响应主体、以200作为状态码的登录html表单,理想情况下,我想要400个错误请求之类的。
当我没有在请求中提供jwt令牌时,我得到的是相同的html响应体,带有200个状态代码,理想情况下,我也需要401。
我缺少什么配置,我可以更改什么来解决这些问题。
1条答案
按热度按时间iezvtpos1#
对于第二个问题,您可以将其添加到http安全配置中
然后在类中自动连接jwtunauthorizedresponseauthenticationentrypoint,并如下定义jwtunauthorizedresponseauthenticationentrypoint类
它将抛出您想要的401错误
在里面
public interface HttpServletResponse extends ServletResponse