Shiro快速入門 —— 3.令牌

本系列博文目錄:http://www.javashuo.com/article/p-ewndobct-kn.htmljava

 

Token(令牌)負責傳遞登陸時用戶輸入的登陸數據。apache

shiro默認令牌

CasToken數組

CA證書認證令牌。令牌屬性包括 證書、用戶id和記住我等。ide

UsernamePasswordTokenthis

用戶名密碼登陸。令牌屬性包括 用戶名、密碼和記住我等。spa

 

令牌的建立

令牌是經過登陸攔截器的createToken方法進行建立的。.net

/**
     * 建立Token
     */
    @Override
    protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {
        String username = getUsername(request);//獲取用戶名 表單name:username
        String password = getPassword(request);//獲取密碼 表單name:password
        boolean rememberMe = isRememberMe(request);//獲取是否記住我 表單name:rememberMe
        String captchaId = WebUtils.getCleanParam(request, "captchaId");//獲取驗證碼id
        String captcha = WebUtils.getCleanParam(request, "captcha");//獲取用戶輸入的驗證碼字符

        return new CaptchaAuthenticationToken(username, password,captchaId, captcha, rememberMe);//存入本身定義的包含驗證碼的Token
    }

 

令牌的獲取

令牌在登陸認證時被doGetAuthenticationInfo做爲入參引入,用於獲取登陸時用戶所填寫的數據。code

/**
     * 登陸認證(身份驗證)
     */
    @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());
    }

自定義令牌

若是shiro現有令牌沒法知足咱們的認證須要,則能夠實現本身的令牌。blog

一個典型的狀況就是,登陸時須要校驗驗證碼。繼承

package pub.lichao.shiro.shiro;

import org.apache.shiro.authc.UsernamePasswordToken;

/**
 * Token - 自定義登陸令牌
 * 繼承並重寫默認的登陸令牌
 */
public class CaptchaAuthenticationToken extends UsernamePasswordToken {

	/**
	 * 自定義構造方法
	 */
	public CaptchaAuthenticationToken(String username, String password, String captchaId, String captcha, boolean rememberMe) {
		super(username, password, rememberMe);
		this.captcha=captcha;
		this.captchaId=captchaId;
	}


	/**
	 * 自定義參數
	 */
	private String captchaId; //驗證碼id
	private String captcha; //錄入的驗證碼字符

	public String getCaptchaId() {
		return captchaId;
	}
	public void setCaptchaId(String captchaId) {
		this.captchaId = captchaId;
	}

	public String getCaptcha() { return captcha; }
	public void setCaptcha(String captcha) {
		this.captcha = captcha;
	}

}
相關文章
相關標籤/搜索