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;
	}

}
相关文章
相关标签/搜索