JAVA中使用JWT


1. 导入maven依赖

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.10.3</version>
</dependency>

2. 登录成功后生成JWT

@ApiOperation("登录")
    @ResponseBody
    @PostMapping("/login")
    public HttpResult login(@RequestBody User user) throws Exception {
        HttpResult result = new HttpResult();
        try {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", user.getUsername());
            queryWrapper.eq("password", user.getPassword());
            User userDB = iUserService.getOne(queryWrapper);
            if (userDB != null) {
                //登录成功后生成JWT
                //JWT的header部分,该map可以是空的,因为有默认值{"alg":HS256,"typ":"JWT"}
                Map<String, Object> map = new HashMap<>();
                Calendar instance = Calendar.getInstance();
                instance.add(Calendar.MINUTE,30);
                String token = JWT.create()
                        .withHeader(map)//添加头部
                        .withClaim("userid",userDB.getId())//添加payload
                        .withClaim("username",userDB.getUsername())
                        .withClaim("email",userDB.getEmail())
                        .withExpiresAt(instance.getTime())//设置过期时间
                        .sign(Algorithm.HMAC256("testjwt"));//设置签名 密钥
                System.out.println(token);
                result.setCode(200);
                result.setMsg("登录成功");
                result.setData(token);
                return result;
            }
            return HttpResult.error(204,"用户名或密码错误,请重新登录!");
        } catch (Exception err) {
            throw new Exception("登录错误:" + err.getMessage());
        }
    }

3. 请求其它路由时验证JWT,并取出其中数据

@ApiOperation("验证登录")
@ResponseBody
@GetMapping("/verifyLogin/{token}")
public HttpResult verifyLogin(@PathVariable("token") String token) throws Exception {
    HttpResult result = new HttpResult();
    try {
        //创建验证对象,这里使用的加密算法和密钥必须与生成TOKEN时的相同否则无法验证
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("testjwt")).build();
        //验证JWT
        DecodedJWT decodedJWT = jwtVerifier.verify(token);
        //获取JWT中的数据,注意数据类型一定要与添加进去的数据类型一致,否则取不到数据
        System.out.println(decodedJWT.getClaim("userid").asInt());
        System.out.println(decodedJWT.getClaim("username").asString());
        System.out.println(decodedJWT.getClaim("email").asString());
        System.out.println(decodedJWT.getExpiresAt());
        result.setCode(200);
        result.setMsg("验证成功");
        return result;
    } catch (Exception err) {
        throw new Exception("验证错误:" + err.getMessage());
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM