文档章节

Shiro快速入门 —— 3.令牌

哼_哼
 哼_哼
发布于 2017/05/09 13:10
字数 513
阅读 63
收藏 2

本系列博文目录:https://my.oschina.net/u/3452433/blog/907396

 

Token(令牌)负责传递登录时用户输入的登录数据。

shiro默认令牌

CasToken

CA证书认证令牌。令牌属性包括 证书、用户id和记住我等。

UsernamePasswordToken

用户名密码登录。令牌属性包括 用户名、密码和记住我等。

 

令牌的创建

令牌是通过登录拦截器的createToken方法进行创建的。

    /**
     * 创建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作为入参引入,用于获取登录时用户所填写的数据。

    /**
     * 登录认证(身份验证)
     */
    @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现有令牌无法满足我们的认证需要,则可以实现自己的令牌。

一个典型的情况就是,登录时需要校验验证码。

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

}

 

© 著作权归作者所有

哼_哼

哼_哼

粉丝 11
博文 63
码字总数 87158
作品 0
哈尔滨
私信 提问
30分钟学会如何使用Shiro

摘要: Shiro的核心部分是SecurityManager,它负责安全认证与授权。Shiro本身已经实现了所有的细节,用户可以完全把它当做一个黑盒来使用。SecurityUtils对象,本质上就是一个工厂类似Spring中...

qq592fbb5b34ad7
2017/06/07
0
0
30分钟学会如何使用Shiro

一、架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。Shiro的应用不依赖任何容器,它也可以在JavaSE下使用。但是最常用的环境还是JavaEE。下面以用户登...

qq5923dd411b8fa
2017/05/23
0
0
shiro jwt 构建无状态分布式鉴权体系

一:JWT 1、令牌构造 JWT(json web token)是可在网络上传输的用于声明某种主张的令牌(token),以JSON 对象为载体的轻量级开放标准(RFC 7519)。 一个JWT令牌的定义包含头信息、荷载信息、签...

wangjie2016
2017/11/22
0
0
30分钟学会如何使用Shiro

一、架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。Shiro的应用不依赖任何容器,它也可以在JavaSE下使用。但是最常用的环境还是JavaEE。下面以用户登...

qq58edeba279279
2018/06/26
0
0
Kubernetes实现SSO登录之命令行体验

上一篇文章中,我们讨论了Kubernetes的几种用户认证方法,还说了我的团队在Pusher希望为我们的工程师创建一个无缝的SSO(单点登录)环境,以及是如何开始对Open ID Connect(OIDC)进行调查并...

m2l0zgssvc7r69efdtj
2018/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式数据一致性

狼王黄师傅
58分钟前
1
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0
从源码的角度来看SpringMVC

SpringMVC核心流程图 简单总结 首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler 此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:H...

骚年锦时
今天
1
0
Android 9.0 某些应用无法访问网络

将App安装在 Android 9.0的设备上发现,竟然无法登录了,后来查阅资料后发现原来是Android 9.0默认使用https访问,因此如果服务器支持 https访问的话,直接将http改成https即可,如果服务器不...

lanyu96
今天
2
0
Gitlab利用Webhook实现Push代码后的jenkins自动构建

之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins...

shzwork
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部