为了账号安全,请及时绑定邮箱和手机立即绑定

捕获并增强 LockedException 和 DisabledException

捕获并增强 LockedException 和 DisabledException

慕慕森 2023-02-16 16:46:32
我将 Spring Security 与 OAuth 2 一起使用。我的 OAuth 用户有account_locked和enabled字段,我出于不同的原因使用它们。例如,account_locked用于阻止用户和enabled停用用户。当用户尝试登录并被阻止时,他会收到401HTTP 代码和消息“用户帐户已锁定”。如果他被停用,那么他也会收到401HTTP 代码和消息“用户已被禁用”。我想用附加信息来增强这些错误(比如可以使用增强令牌TokenEnhancer)来区分块代码和客户端上的停用代码。例如与 field reason_of_fail。请注意,我不想使用来自这些错误的短信。我已经尝试使用这个(来自这个答案):@Overrideprotected void configure(HttpSecurity http) throws Exception {    http.exceptionHandling()            .authencationEntryPoint(unauthorizedHandler)              .accessDeniedHandler(accessDeniedHandler);    }但是这些处理程序不会捕获LockedExceptionand DisabledException。那么,如何使用附加字段(键值对)来增强这些错误?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

授权服务器


如果您想将此功能添加到您的授权服务器,并且您有一个自定义AbstractTokenGranter(请参阅下面的对话),那么您可以在该方法中捕获所需的异常getOAuth2Authentication。然后,您可以抛出一个自定义异常,用您需要的任何附加字段

扩展OAuth2Exception和填充地图。 有关如何执行此操作的示例,您可以查看spring-security-oauth 项目中的ResourceOwnerPasswordTokenGranter 。additionalInformation


客户


相反,如果您想将此功能添加到您的 OAuth2 客户端,那么您可以使用自定义AuthenticationFailureHandler来捕获LockedExceptionand DisabledException。

这是一个示例安全配置:


@Override

protected 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

        }

    }

}


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号