SpringBoot配置JWT拦截器

目录

1.背景介绍

2.前提工作

3.具体代码

(1)相关依赖

(2)相关配置文件

(3)JwtUtils类

(4)准备好登录逻辑代码(Dao、Service、Controller)

(5)拦截器JwtInterceptor类

(6)注册拦截器到配置类

4. 测试


1.背景介绍

        JWT在之前文章提到过,JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519),它允许在网络中安全地传输声明(claims)作为 JSON 对象。JWT 可以通过数字签名或加密来验证数据的完整性和真实性,从而保证数据在传输过程中不被篡改。

        工作流程

  1. 用户通过用户名和密码等方式进行身份验证。
  2. 服务器验证用户身份,并生成一个 JWT。
  3. 服务器将 JWT 发送给客户端
  4. 客户端将 JWT 存储起来,通常是在本地存储或者内存中。
  5. 客户端将 JWT 添加到每个后续的 HTTP 请求的 Authorization 头部中。
  6. 服务器收到请求后,解析 JWT 并验证签名。
  7. 如果验证通过,则处理请求;如果验证失败,则拒绝请求。

2.前提工作

        1.Redis,用于将生成的token存入其中

        2.用户登录Controller

        3.Jwtutils、相关依赖

        4.拦截器JwtInterceptor

        5.配置类WebMvcConfig,用于注册拦截器

3.具体代码

(1)相关依赖
        <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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
(2)相关配置文件
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/login?useSSL=false&serverTimezone=UTC
    username: #自己的数据库用户名
    password: #自己的数据库密码

  redis:
    host: localhost
    port: 6379


mybatis:
  mapper-locations: classpath:mapper/*.xml


jwt:
  secret: T7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5vT7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5vT7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5vT7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5v
  expiration: 864000
(3)JwtUtils类
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonweb
Spring Boot中的JWT拦截器是一种用于处理JSON Web Token(JWT)的机制。它主要用于在Spring Boot应用中实现认证和授权功能。JWT是一种用于在网络应用环境间安全地传递声明的一种紧凑的、自包含的方式。 以下是JWT拦截器Spring Boot中的主要功能和实现步骤: 1. **生成JWT**: 当用户成功登录后,服务器会生成一个JWT,并将其返回给客户端。JWT通常包含用户信息和过期时间等信息。 2. **验证JWT**: 在每次请求时,客户端需要在请求头中包含JWT。服务器端的JWT拦截器会验证这个JWT的有效性,包括签名验证、过期时间检查等。 3. **授权**: 验证通过后,拦截器会解析JWT中的用户信息,并根据这些信息进行授权控制,确保用户有权限访问相应的资源。 ### 实现步骤 1. **添加依赖**: 在`pom.xml`中添加JWT相关的依赖,例如`jjwt`库。 ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> ``` 2. **创建JWT工具类**: 这个类用于生成和验证JWT。 ```java public class JwtUtil { private String secret = "your-256-bit-secret"; public String generateToken(String username) { return Jwts.builder() .setSubject(username) .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) .signWith(SignatureAlgorithm.HS256, secret) .compact(); } public String validateToken(String token) { try { Claims claims = Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); return claims.getSubject(); } catch (Exception e) { throw new RuntimeException("Invalid Token"); } } } ``` 3. **创建JWT拦截器**: 这个拦截器会拦截所有请求,验证JWT的有效性。 ```java public class JwtInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getHeader("Authorization"); if (token == null || !token.startsWith("Bearer ")) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return false; } token = token.substring(7); try { String username = new JwtUtil().validateToken(token); request.setAttribute("username", username); return true; } catch (Exception e) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return false; } } } ``` 4. **注册拦截器**: 在Spring Boot配置类中注册JWT拦截器。 ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new JwtInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/login"); } } ``` 通过以上步骤,你就可以在Spring Boot应用中实现JWT拦截器,从而实现认证和授权功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛变涡流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值