JAVA-JWT

时间:2024-7-22    作者:老大夫    分类: 工具类


带签名的JWT叫JWS

登录接口需要为登录成功的用户创建并返回JWT,本项目使用开源的JWT工具Java-JWT,配置如下,具体内容可参考官方文档

    • 引入Maven依赖

    common模块的pom.xml文件中增加如下内容

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-api</artifactId>
    </dependency>
    
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-impl</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-jackson</artifactId>
        <scope>runtime</scope>
    </dependency>
    • 创建JWT工具类

    common模块下创建com.atguigu.lease.common.utils.JwtUtil工具类,内容如下


//构造key
    public static SecretKey secretKey = Keys.hmacShaKeyFor("ZCE0qgXsTjReejmxujzTAUHjj3efyiZ0".getBytes());

    public static String createToken(Long userId,String userName){
        String jwt=Jwts.builder().
                setExpiration(new Date(System.currentTimeMillis()+3600000)).//设置过期时间  单位毫秒
                setSubject("LOGIN_USER").   //设置主题
                claim("userId",userId).  //声明自定义属性要用claim
                claim("username",userName).
                signWith(secretKey) //构造签名:输入密令key  选择签名算法
                .compact();   //打包
        return jwt;
    }

    public static void main(String[] args) {
        String token = createToken(1L, "zhangsan");
        System.out.println(token);
    }

token校验器

我们需要为所有受保护的接口增加校验JWT合法性的逻辑。具体实现如下

  • JwtUtil中增加parseToken方法,内容如下
    public static Claims parseToken(String token){

        if (token==null){
            throw new LeaseException(ResultCodeEnum.ADMIN_LOGIN_AUTH);
        }

        try{
            JwtParser jwtParser = Jwts.parserBuilder().setSigningKey(secretKey).build();
            return jwtParser.parseClaimsJws(token).getBody();
        }catch (ExpiredJwtException e){
            throw new LeaseException(ResultCodeEnum.TOKEN_EXPIRED);
        }catch (JwtException e){
            throw new LeaseException(ResultCodeEnum.TOKEN_INVALID);
        }
    }


扫描二维码,在手机上阅读

推荐阅读: