springboot拦截器加jwt实现登录校验
时间: 2024-09-25 10:09:53 浏览: 66
Spring Boot 中使用拦截器(Interceptor)配合 JWT(JSON Web Tokens)实现登录验证通常用于保护 RESTful API 路径,确保只有经过身份验证的用户才能访问。步骤如下:
1. **添加依赖**:
- 添加 Spring Security 和 JWT 相关依赖到 `pom.xml` 或 `build.gradle` 文件中。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
```
2. **配置 JWT**:
- 创建一个JWT工具类,负责生成、解析和验证JWT。
- 使用Spring Security自定义一个WebSecurityConfigurerAdapter,配置JWT处理器和全局异常处理。
```java
@Configuration
@EnableWebSecurity
public class JwtSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtUtil jwtUtil;
//...省略其他配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() // 防止CSRF攻击
.authorizeRequests()
.antMatchers("/api/**").authenticated()
.anyRequest().permitAll();
http.addFilterBefore(new JwtAuthenticationFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
}
//...省略其他方法
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter() {
return new JwtAuthenticationFilter(jwtUtil);
}
}
```
3. **创建JWT过滤器**:
- `JwtAuthenticationFilter` 会检查请求头中的 Authorization 头,然后尝试从其中提取JWT并验证其有效性。
4. **创建JWT工具类**:
```java
public class JwtUtil {
// JWT相关的加密、签发和验证逻辑
public String createToken(UserDetails userDetails) {
//...
}
public boolean validateToken(String token, UserDetails userDetails) {
//...
}
}
```
5. **登录成功后的逻辑**:
用户通过认证后,返回一个包含 JWT 的响应(例如:`Authorization: Bearer {token}`)。在控制器方法上加上 `@PreAuthorize("hasRole('USER')")` 等注解进行权限控制。
阅读全文
相关推荐


















