1 .概述
- 基于JWT 实现身份认证和授权,是当前流行的一种技术解决方案。
- 使用这种方案,要求用户先发来用户名与密码,当用户名与密码校验通过时,服务器端返回一个JWT给客户端。
- 客户端拿到JWT之后,将其放到HTTP 请求名为Authorization的Header 中,随后继请求一起发给服务端
- 服务端先校验JWT的有效性,有效之后,开放资源给客户端访问。
2. Token
- Token 是一种有着特定含义的短小的字符串
- 在Web开发中,Token 通常由WebServer 端生成,“颁发”给客户端,这些Token通常保存由一些比较重要的信息,客户端在发出HTTP请求时,通常要求在HTTP Header 中放置这些Token供Server 端处理。
- 为了保证安全性,Token 通常被编码和签名,并且拥有一个特定的“生存期”,过期的Token会被废弃。
3. 实战
(1) 添加项目依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
</dependency>
(2) 定义常量
public interface SecurityConstants {
public static final String JWT_KEY="这是我的一个私有密钥,用于生成JWT";
public static final String JWT_HEADER="Authorization";
}
(3) 生成JWT
public class JWTUtils {
public static String generateJWT(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(authentication != null