JWT 试用

2020-02-23 18:19:07

本例使用了 io.jsonwebtoken 开源项目,作为 token 的实现。

安装

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

生成 token

//设置jti(JWT ID):是JWT的唯一标识,根据业务需要,这个可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击。
    private static String jwtId = "miniapp";
    //sub(Subject):代表这个JWT的主体,即它的所有人,这个是一个json格式的字符串,可以存放什么userid,roldid之类的,作为什么用户的唯一标志。
    private static String jwtSubject = "tunghsing.wang";
    //jwt签发者
    private static String jwtIssuer = "jwt";

    private static Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

    public static String generateToken(Integer id) {

        //Let's set the JWT Claims
        JwtBuilder builder = Jwts.builder()
                .setId(jwtId)
                .setIssuedAt(new Date()) //iat: jwt的签发时间
                .setSubject(jwtSubject)
                .setIssuer(jwtIssuer)
//                .setAudience("uid") //user.getid
                .claim("uid",id)
                .signWith(key);

        //Builds the JWT and serializes it to a compact, URL-safe string
        return builder.compact();

    }

验证 token

public static Integer parseToken(String jwt) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(key)
                    .parseClaimsJws(jwt).getBody();
            return (Integer) claims.get("uid");
        } catch (JwtException e) {
            System.out.println(e);
            logger.error("{}",e.getMessage());
            return null;
        }

    }
Copyright tg-blog 京ICP备15066502号-2