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 @   如幻行云  阅读(1841)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示