1.创建一个Realm类
创建一个类,继承AuthorizingRealm
,然后在doGetAuthenticationInfo
中重写认证的方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
CbUserDO userDO = cbUserService.getUser( username );
// 账号不存在
if (userDO==null){
throw new UnknownAccountException("未找到账号");
}
// 密码错误
if (!password.equals(userDO.getPassword())) {
throw new IncorrectCredentialsException("账号或密码不正确");
}
// 账号锁定
if (userDO.getStatus() == 0) {
throw new LockedAccountException("账号已被锁定,请联系管理员");
}
// password 需要和 token.getCredentials() 一致且不可为空,不然会抛出异常
return new SimpleAuthenticationInfo(userDO, password, getName());
}
2.其他需要重写的方法
/**
* 判断此Realm是否支持此Token
*
* @param token tocken
* @return 是否支持
*/
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof UsernamePasswordToken;
}
/**
* 该realm的名字
* @return name
*/
@Override
public String getName() {
return "UserRealm";
}
/**
* 授权信息
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
3.需要注意的事项
new SimpleAuthenticationInfo()
中的 password
需要和 token.getCredentials()
的值一致且不可为null
,不然会抛出异常