捕获并增强 LockedException 和 DisabledException

我将 Spring Security 与 OAuth 2 一起使用。我的 OAuth 用户有account_locked和enabled字段,我出于不同的原因使用它们。例如,account_locked用于阻止用户和enabled停用用户。当用户尝试登录并被阻止时,他会收到401HTTP 代码和消息“用户帐户已锁定”。如果他被停用,那么他也会收到401HTTP 代码和消息“用户已被禁用”。


我想用附加信息来增强这些错误(比如可以使用增强令牌TokenEnhancer)来区分块代码和客户端上的停用代码。例如与 field reason_of_fail。请注意,我不想使用来自这些错误的短信。


我已经尝试使用这个(来自这个答案):


@Override

protected void configure(HttpSecurity http) throws Exception {

    http.exceptionHandling()

            .authencationEntryPoint(unauthorizedHandler)  

            .accessDeniedHandler(accessDeniedHandler);    

}

但是这些处理程序不会捕获LockedExceptionand DisabledException。


那么,如何使用附加字段(键值对)来增强这些错误?


慕慕森
浏览 151回答 1
1回答

萧十郎

授权服务器如果您想将此功能添加到您的授权服务器,并且您有一个自定义AbstractTokenGranter(请参阅下面的对话),那么您可以在该方法中捕获所需的异常getOAuth2Authentication。然后,您可以抛出一个自定义异常,用您需要的任何附加字段扩展OAuth2Exception和填充地图。 有关如何执行此操作的示例,您可以查看spring-security-oauth 项目中的ResourceOwnerPasswordTokenGranter 。additionalInformation客户相反,如果您想将此功能添加到您的 OAuth2 客户端,那么您可以使用自定义AuthenticationFailureHandler来捕获LockedExceptionand DisabledException。这是一个示例安全配置:@Overrideprotected void configure(HttpSecurity http) throws Exception {    http        .oauth2Login()            .failureHandler(new CustomAuthenticationFailureHandler());}一个自定义的例子AuthenticationFailureHandler:public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {    @Override    public void onAuthenticationFailure(HttpServletRequest request,            HttpServletResponse response, AuthenticationException exception) {        if (exception instanceof DisabledException) {            // throw new exception or modify response        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java