登陆鉴权扩展
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 作者:超级管理员