登陆鉴权扩展

v2.0 采用的是 Spring Security来实现的权限认证,OPSLI针对Spring Security 开发了一定的扩展控件

核心组件 opsli-plugins-security

登陆鉴权流程图

极简登陆代码

例如

     private LoginHandler<LoginModel> loginHandler;
     /**
     *  登陆方法
     *  @params encryptModel 非对称加密
     */
    @Limiter
    @ApiOperation(value = "账号+密码 登录", notes = "账号+密码 登录")
    @PostMapping("/system/login")
    public void login(@RequestBody EncryptModel encryptModel){
        // 验证加密登录对象
        ValidatorUtil.verify(encryptModel);

        // 解密对象
        Object dataToObj = CryptoUtil
                .asymmetricDecryptToObj(encryptModel.getEncryptData());

        // 转换模型
        LoginModel loginModel = WrapperUtil.transformInstance(dataToObj, LoginModel.class);

        // 验证登录对象
        ValidatorUtil.verify(loginModel);

        loginHandler.login(loginModel,
                model -> {
                    String principal = loginModel.getPrincipal();
                    LoginModelType loginModelType = LoginModelType.getTypeByStr(principal);
                    Authentication authentication = null;
                    switch (loginModelType) {
                        case MOBILE:
                            authentication =
                                    new MobilePasswordAuthenticationToken(principal, model.getPassword());
                            break;
                        case EMAIL:
                            authentication =
                                    new EmailPasswordAuthenticationToken(principal, model.getPassword());
                            break;
                        case ACCOUNT:
                            authentication =
                                    new UsernamePasswordAuthenticationToken(principal, model.getPassword());
                        default:
                            break;
                    }
                    return authentication;
                }
        );
    }
     /**
     *  初始化方法
     */
     @Autowired
    public void init(
            AuthenticationManager authenticationManager,
            LoginModelVerifyTempLockedBeforeHandler loginModelVerifyTempLockedBeforeHandler,
            LoginModelVerifyCaptchaBeforeHandler loginModelVerifyCaptchaBeforeHandler,
            LoginModelCreateAccessTokenHandler loginModelCreateAccessTokenHandler,
            LoginSuccessAfterVerifyHandler loginSuccessAfterVerifyHandler,
            LoginClearErrorSuccessHandler loginClearErrorSuccessHandler,
            LoginModelClearCaptchaSuccessHandler loginModelClearCaptchaSuccessHandler,
            LoginSuccessLogHandler loginSuccessLogHandler,
            AuthServiceErrorHandler authServiceErrorHandler,
            BizServiceErrorHandler bizServiceErrorHandler,
            OtherErrorHandler otherErrorHandler,
            AuthErrorHandler authErrorHandler,
            SecurityErrorHandler securityErrorHandler ){

        loginHandler = new LoginHandler.Builder<LoginModel>()
                .initAuthenticationManager(authenticationManager)
                .initLoginModelClass(LoginModel.class)
                // 前置处理器
                .before()
                    // 验证账号是否临时冻结
                    .addListener(loginModelVerifyTempLockedBeforeHandler)
                    // 超过登陆失败次数 需要校验验证码
                    .addListener(loginModelVerifyCaptchaBeforeHandler)
                .and()
                // 成功处理
                .accessSuccess()
                    // 返回 记录登录日志信息
                    .addListener(loginSuccessLogHandler)
                    // 清除错误日志
                    .addListener(loginClearErrorSuccessHandler)
                    // 清除对应验证码信息
                    .addListener(loginModelClearCaptchaSuccessHandler)
                    // 登陆成功后 验证用户其他相关信息
                    .addListener(loginSuccessAfterVerifyHandler)
                    // 返回 accessToken
                    .addListener(loginModelCreateAccessTokenHandler)
                .and()
                // 异常处理
                .accessDenied()
                    // 增加认证服务异常处理器
                    .addListener(authServiceErrorHandler)
                    // 增加认证异常处理器
                    .addListener(authErrorHandler)
                    // 增加账户认证异常处理器
                    .addListener(securityErrorHandler)
                    // 增加内部业务异常处理器
                    .addListener(bizServiceErrorHandler)
                    // 增加其他未捕获异常处理器
                    .addListener(otherErrorHandler)
                .and()
                .build();
    }
文档更新时间: 2023-06-02 12:49   作者:超级管理员