spring boot2 (40)- JWT token

本篇介绍JWT token的生成和解析的基本方法

pom.xml

            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-api</artifactId>
                <version>0.11.5</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-impl</artifactId>
                <version>0.11.5</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-jackson</artifactId>
                <version>0.11.5</version>
                <scope>runtime</scope>
            </dependency>

基本用法

public class JjwtUtil {
    //秘钥
    private static Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    
    public static String create(String id,String subject) {
        String token = Jwts.builder()
                .setId(id)    //自定义的id
                .setSubject(subject)    //自定义的参数
                //1小时过期
                .setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 1000)) 
                .signWith(key).compact();
        System.out.println(token);
        return token;
    }
    
    public static void parser(String token) {
        Jws<Claims> claims = Jwts.parserBuilder().setSigningKey(key).build()
                .parseClaimsJws(token);
        System.out.println(claims.getBody().getId());
        System.out.println(claims.getBody().getSubject());
    }
    
    public static void main(String args[]) throws InterruptedException {
        String token = create("1","json参数");
        parser(token);
  • create:登录成功后,调用这个方法生成token,并返回给登录者。id和subject可以设置一些你自定义的参数,subject可以是json,就相当于session中存储的一些参数一样。

  • parser:请求接口时,每次都要携带token,调用这个方法来验证token。如果token不合法,就会抛出异常。验证成功,就可以获取到创建token时写入的参数,如id和subject

  • setExpiration:设置token的过期时间,到期以后,再次验证这个token时,就会抛异常。

适用场景

  • 单次验证:比较激活一个账号,将token发送到客户邮箱,客户激活后token即失效。可以考虑在缓存中添加和删除token参数中的id,来验证token是否使用,是否失效。

  • 分布式:如spring的oauth2相关技术中,客户端请求服务端接口时,都集成了JWT。注意,客户端是指微服务中的客户端,而不是指客户。

不建议场景

  • 替代session:自从前些年jwt流行以后,有很多人使用jwt来替代session。这是在盲目的追求新技术,jwt比session性能更低,安全性更差,具体差在哪,我在此不作长遍解释,网上有很多文章说明。Spring Security官方文档也明确指出,token不能用来替代session。

  • 单点登录:使用jwt确实可以简化单点登录功能,但是这只适合一时应急用。如果要构建长期稳定良好的体系,正统的做法应该是oauth2。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值