Token-具体讲解-项目实践理论

                                                    **Token**
    Token作用于很多地方。比如我们在做单体架构TomCat搭建集群的时候,session是基于TomCat来创建的,每个TomCat都有不同的session所以我们在登录或者权限认定的时候,是无法保证session的独一性的。
    使用Token去中心化:
    准备一台授权的服务器,用于发放令牌。当客户端带着令牌去任意的服务时,任意服务都可以通过token获取用户的身份。
	
	打个比方比如说钱,我给了我儿子100快钱,它可以去超市买东西,也可以去玩具城买玩具,还可以吃路边的小吃,
	然后呢,超市收款小姐姐会查看我儿子的100块钱是否是真的。这就好比,服务器返回给客户端一个token,它可以随意的访问任意的项目,我们后端在获取的Token进行一个解析来判断是否让他访问。

	一般生成-解析Token我们用JWT(json web token)
	
	如何给我儿子100块钱呢:
	第一步:
	导入JWT依赖:
<dependency>
 <groupId>io.jsonwebtoken</groupId>
 <artifactId>jjwt</artifactId>
 <version>0.9.1</version>
</dependency>
	第二步:生成token
String token = Jwts.builder()
		//头部
     .setSubject(//一般写于用户名)
     .claim("nickName", nickName)
     .claim("role", role)
     .claim("perm", perm)
     .setIssuedAt(new Date())
     .setExpiration(new Date(new Date().getTime() + 1000))  // 载荷
     .signWith(SignatureAlgorithm.HS256, sign.getBytes())  // 签名
     .compact();
	第三步:我们可以把token和用户的信息保存在我们的一个对象中通过ThreadLocal<String,Object>把所有信息都存储到我们的ThreadLocal中
	第四布:可以把100块钱给了我儿子,让他去买东西
	
	最后当请求我们服务器的时候,会携带着这个token,那么我们服务器应该怎么操作呢
	我们可以继承BaseInterceptor来对请求做一个拦截
@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getMethod().equals(HttpMethod.OPTIONS.name())) {
            return true;
        }
        threadLocal.set(System.currentTimeMillis());
        final String authToken = request.getHeader(this.tokenHeader);
        if (StringUtils.isEmpty(authToken)) {          
            buildFailResponse(response, "未授权的访问,token不能为空");
            return false;
        }
     
        return super.preHandle(request, response, handler);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值