JwtToken.java

package com.mycim.webapp.secutiry.jwt.token;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.interfaces.Verification;
import com.fa.sesa.threadlocal.LocalContextNames;
import com.mycim.webapp.secutiry.jwt.JwtUtils;
import org.apache.shiro.authc.AuthenticationToken;

/**
 * 实现自定义Token
 *
 * @author songp
 */
public class JwtToken implements AuthenticationToken {
    private static final String PROCESS_RRN_KEY = "PROCESSRRN";

    private static final String DATA_PERMISSION_KEY = "dataPermissionFlag";

    private static final String NEED_UPDATE_PWD = "NEED_UPDATE_PWD";

    private static final String SPECIAL_ROLE = "SPECIAL_ROLE";

    private String token;

    private Long facilityRrn;

    private Long userRrn;

    private String userId;

    private String lanague;

    private String processRrns;

    private String dataPermissionFlag;

    private boolean specialRole;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    private boolean needUpdatePwd;

    public JwtToken(Long facilityRrn, Long userRrn, String userId, String lanague, String processRrns,
                    String dataPermissionFlag) {
        this.facilityRrn = facilityRrn;
        this.userRrn = userRrn;
        this.lanague = lanague;
        this.userId = userId;
        this.processRrns = processRrns;
        this.dataPermissionFlag = dataPermissionFlag;
    }

    public JwtToken(String token) {
        setToken(token);
    }

    public JwtToken() {
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
        this.facilityRrn = (Long) JwtUtils.getValueByKey(this.token, LocalContextNames.FACILITY_RRN_KEY);
        this.userRrn = (Long) JwtUtils.getValueByKey(this.token, LocalContextNames.USER_RRN_KEY);
        this.lanague = (String) JwtUtils.getValueByKey(this.token, LocalContextNames.LANGUAGE_KEY);
        this.userId = (String) JwtUtils.getValueByKey(this.token, LocalContextNames.USER_ID_KEY);
        this.processRrns = (String) JwtUtils.getValueByKey(this.token, PROCESS_RRN_KEY);
        this.dataPermissionFlag = (String) JwtUtils.getValueByKey(this.token, DATA_PERMISSION_KEY);
        this.needUpdatePwd = (Boolean) JwtUtils.getValueByKey(this.token, NEED_UPDATE_PWD);
        this.specialRole = (Boolean) JwtUtils.getValueByKey(this.token, SPECIAL_ROLE);
    }

    public Long getFacilityRrn() {
        return facilityRrn;
    }

    public void setFacilityRrn(Long facilityRrn) {
        this.facilityRrn = facilityRrn;
    }

    public Long getUserRrn() {
        return userRrn;
    }

    public void setUserRrn(Long userRrn) {
        this.userRrn = userRrn;
    }

    public String getLanague() {
        return lanague;
    }

    public void setLanague(String lanague) {
        this.lanague = lanague;
    }

    public String getProcessRrns() {
        return processRrns;
    }

    public void setProcessRrns(String processRrns) {
        this.processRrns = processRrns;
    }

    public String getDataPermissionFlag() {
        return dataPermissionFlag;
    }

    public void setDataPermissionFlag(String dataPermissionFlag) {
        this.dataPermissionFlag = dataPermissionFlag;
    }

    @Override
    public Object getPrincipal() {
        return token;
    }

    @Override
    public Object getCredentials() {
        return token;
    }

    public boolean isNeedUpdatePwd() {
        return needUpdatePwd;
    }

    public void setNeedUpdatePwd(boolean needUpdatePwd) {
        this.needUpdatePwd = needUpdatePwd;
    }

    public boolean isSpecialRole() {
        return specialRole;
    }

    public void setSpecialRole(boolean specialRole) {
        this.specialRole = specialRole;
    }

    /**
     * 返回一个Token 构建类
     */
    public JWTCreator.Builder getBuilder() {
        return JWT.create().withClaim(LocalContextNames.USER_RRN_KEY, this.userRrn)
                  .withClaim(LocalContextNames.FACILITY_RRN_KEY, this.facilityRrn)
                  .withClaim(LocalContextNames.LANGUAGE_KEY, this.lanague)
                  .withClaim(LocalContextNames.USER_ID_KEY, this.userId).withClaim(PROCESS_RRN_KEY, this.processRrns)
                  .withClaim(DATA_PERMISSION_KEY, this.dataPermissionFlag).withClaim(NEED_UPDATE_PWD,this.needUpdatePwd)
                  .withClaim(SPECIAL_ROLE, this.specialRole);
    }

    /**
     * 返回一个Token 验证器
     */
    public Verification getVerification(Verification verification) {
        return verification.withClaim(LocalContextNames.USER_RRN_KEY, this.userRrn)
                           .withClaim(LocalContextNames.FACILITY_RRN_KEY, this.facilityRrn)
                           .withClaim(LocalContextNames.LANGUAGE_KEY, this.lanague)
                           .withClaim(LocalContextNames.USER_ID_KEY, this.userId)
                           .withClaim(PROCESS_RRN_KEY, this.processRrns)
                           .withClaim(DATA_PERMISSION_KEY, this.dataPermissionFlag)
                           .withClaim(NEED_UPDATE_PWD,this.needUpdatePwd)
                           .withClaim(SPECIAL_ROLE, this.specialRole);
    }

}