Spring集成Jwt操作

流程:用户登录(用户名&密码)->  后端方法验证(一般后端会有"安全"框架,开放一个白名单路径:/login)->  验证通过生成Token返给前端->  前端通过Cookie保存token之后请求在请求头中携带Token->  后端验证Token没啥问题放行(一般都会配置拦截器或者啥的 验证通过就让你走,没有Token一般就直接给你拦下来,Token过期也拦下)->没有问题继续后面请求。

1.添加依赖

        <!-- JWT依赖 -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <!-- 版本自己选哈 -->
            <version>0.7.0</version>
        </dependency>

2.生成Token

    public String createToken (String username){
        Date nowDate = new Date();
        Date expireDate = new Date(nowDate.getTime() + expire * 1000);//过期时间

        return Jwts.builder()
                .setHeaderParam("typ", "JWT")
                .claim("userName", username)//注意 这里面存放内容后面可以解析,别放贵重物品哈。
                //public class DefaultClaims extends JwtMap implements Claims {                     
                //这个东西是k:v后面取得时候别不会了,不行打印出来瞅一眼。
                //.setSubject(subject)
                .setIssuedAt(nowDate)
                .setExpiration(expireDate)
                .signWith(SignatureAlgorithm.HS256, Base64.decode(secret))//算法和密钥
                //可以采用RSA非对称加密的方式
                .compact();
    }

3.解析Token

    public Map parseToken(String token) {
        Map<String,Object> map = new HashMap<>
        //下面这一句比较关键
        //注意setSigningKey(注意参数类型和加密时候保持一致)
        Claims claims =             
        Jwts.parser().setSigningKey(Base64.decode(SECRET)).parseClaimsJws(token).getBody();
        isTokenExpired(claims.getExpiration());
        if (null != claims) {
            Iterator iterator = claims.keySet().iterator();
            jsonObjToken = new JSONObject();
            while (iterator.hasNext()) {
                String key = iterator.next().toString();
                map.put(strKey, claims.get(key));
            }
        }
        return map;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值