Shiro免密登录

coding

最近做接入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

回到顶部