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