XiaoRuby
2023-08-07 d8a687741273d121586b83745280c57f7e9d3297
user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.yuanchu.limslaboratory.shiro.realm;
import com.yuanchu.limslaboratory.pojo.User;
import com.yuanchu.limslaboratory.shiro.JwtToken;
import com.yuanchu.limslaboratory.utils.RedisUtil;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class JwtRealm extends AuthorizingRealm {
    /**
     * é™å®šè¿™ä¸ª Realm åªå¤„理我们自定义的 JwtToken
     */
    @Override
    public boolean supports(AuthenticationToken token) {
        return token instanceof JwtToken;
    }
    /**
     * æ­¤å¤„çš„ SimpleAuthenticationInfo å¯è¿”回任意值,密码校验时不会用到它
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
        JwtToken jwtToken = (JwtToken) authcToken;
        if (jwtToken.getPrincipal() == null) {
            throw new AccountException("Token参数异常!");
        }
        // å½“前用户
        String account = jwtToken.getPrincipal().toString();
        // å½“前用户的token
        String credentials = (String)jwtToken.getCredentials();
        User user = (User) RedisUtil.get(credentials);
        // ç”¨æˆ·ä¸å­˜åœ¨
        if (user == null) {
            throw new UnknownAccountException("用户不存在!");
        }
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, account, getName());
        return info;
    }
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        return info;
    }
}