SpringBoot 整合JWT分布式权限控制

Token校验可以使用拦截器或过滤器

一、JWT

  1. Maven依赖

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.2.0</version>
</dependency>

  2. JWT工具类


package com.ruhuanxingyun.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.ruhaunxingyun.commons.CommonConstant;

import java.io.UnsupportedEncodingException;
import java.util.Date;

/**
* @description: JWT工具类
* @author: ruphie
* @date: Create in 2019/12/20 17:29
* @company: ruhuanxingyun
*/
public class JwtUtils {

private final static String USERNAME = "username";

/**
* 生成token
*
* @param secret 密钥
* @param username 用户名
* @return token
*/
public static String sign(String secret, String username) throws UnsupportedEncodingException {
Date date = new Date(System.currentTimeMillis() + CommonConstant.EXPIRE_TIME);
Algorithm algorithm = Algorithm.HMAC256(secret);
String token = JWT.create()
.withClaim(USERNAME, username)
.withExpiresAt(date)
.sign(algorithm);

return token;
}

/**
* 根据token获取用户名
*
* @param token 令牌
* @return username
*/
public static String getUsername(String token) {
DecodedJWT decodedJWT = JWT.decode(token);
String username = decodedJWT.getClaim(USERNAME).asString();

return username;
}

/**
* 校验token
*
* @param secret 密钥
* @param username 用户名
* @param token token
* @return 是否合法
*/
public static boolean verify(String secret, String username, String token) {
try {
Algorithm algorithm = Algorithm.HMAC256(secret);
JWT.require(algorithm)
.withClaim(USERNAME, username)
.build()
.verify(token);

return true;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();

return false;
}
}


二、JJWT

  简介:为了更友好在JVM上使用JWT,它是基本于JWT, JWS, JWE, JWK框架的Java实现。

  1. Maven依赖

<!-- JWT令牌支持 -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>

 

可参考:分布式 权限控制(JWT)

    SpringBoot整合JWT

    几种常用的认证机制 

    Cookie/Session/Token/Session的详解

posted @ 2019-12-09 08:32  如幻行云  阅读(1822)  评论(0编辑  收藏  举报