登陆认证用于登录时验证登陆者的身份真实性。
我们可以通过 CA证书或用户名密码等方式进行认证。
重写认证方法
shiro不会为我们提供现成的认证规则,需要我们自己编写认证规则。
编写认证规则时我们需要继承AuthorizingRealm类,并实现doGetAuthenticationInfo抽象方法。
public class ShiroRealm extends AuthorizingRealm {
/**
* 登录认证(身份验证)
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
/**
* 自己实现的认证规则
*/
}
}
认证通过
认证信息如果符合认证规则,则认证通过。
认证通过时需要返回一个认证信息接口AuthenticationInfo的实现类SimpleAuthenticationInfo
/**
* 登录认证(身份验证)
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
CaptchaAuthenticationToken authenticationToken = (CaptchaAuthenticationToken) token; //获得登录令牌
String username = authenticationToken.getUsername();
String password = new String(authenticationToken.getPassword());//将char数组转换成String类型
String captchaId = authenticationToken.getCaptchaId();
String captcha = authenticationToken.getCaptcha();
// 验证用户名密码和验证码是否正确
usernamePasswordAndCaptchaAuthentication(username,password,captchaId,captcha);
//创建身份信息类(自定义的)
Principal principal = new Principal(1L, username);
//认证通过返回认证信息类
return new SimpleAuthenticationInfo(principal, password, getName());
}
认证失败
认证信息如果不符合认证规则,则认证不通过。
认证不通过时抛出Authenticati