Shiro免密登录
最近做接入SSO单点登录,需要从别的系统返回的用户然后直接登录,所以需要用到免密登录,其实很简单,自己写一个类继承HashedCredentialsMatcher类,然后重写doCredentialsMatch,判断免密登录规则可结合实际业务需求更改,符合规则的return true就代表密码校验通过,代码如下:
import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
public class CybHashedCredentialsMatcher extends HashedCredentialsMatcher {
@Override
public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
if(StringUtils.isNotBlank(token.getSubtype())) {
return true;
}
// 将密码加密与系统加密后的密码校验,内容一致就返回true,不一致就返回false
return super.doCredentialsMatch(token, info);
}
}
我的UsernamePasswordToken是继承了org.apache.shiro.authc.UsernamePasswordToken然后添加了subtype字段的,这是ThinkGem大师的代码
最后在Shiro登录认证方法doGetAuthenticationInfo里面把HashedCredentialsMatcher类换成刚刚写好的CybHashedCredentialsMatcher类就行了,然后放入setCredentialsMatcher方法作为参数。
最后是免密登录代码
UsernamePasswordToken token = new UsernamePasswordToken(); //账号一定要在数据库中, 密码随便填
token.setUsername("lisi");
token.setPassword("123".toCharArray());
//subtype为判断是否免密登录的重要参数
token.setSubtype("SSO登录");
SecurityUtils.getSubject().login(token);
以上是 Shiro免密登录 的全部内容, 来源链接: utcz.com/z/509303.html