spring security如何启用jwt身份验证
时间: 2023-08-23 13:08:15 浏览: 163
springboot+jwt实现token登陆权限认证的实现
5星 · 资源好评率100%
要在Spring Security中启用JWT身份验证,需要进行以下几个步骤:
1. 添加Spring Security和JWT依赖项
在Maven或Gradle构建文件中添加以下依赖项:
Maven:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
Gradle:
```
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
```
2. 创建JWT工具类
创建一个JWT工具类,该类负责生成和验证JWT令牌。可以根据需要添加其他功能,例如设置过期时间、设置私钥等。
3. 创建自定义UserDetailsService
创建一个自定义的UserDetailsService,该服务负责从数据库或其他数据源中获取用户的身份验证信息,并将其与JWT令牌中的信息进行比较。
4. 创建自定义AuthenticationFilter
创建一个自定义的AuthenticationFilter,该过滤器负责从请求中提取JWT令牌,并将其传递给Spring Security进行身份验证。
5. 配置Spring Security
在Spring Security配置中启用JWT身份验证,例如:
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MyUserDetailsService userDetailsService;
@Autowired
private JwtRequestFilter jwtRequestFilter;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/authenticate").permitAll()
.anyRequest().authenticated()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
}
```
在这个示例中,我们禁用了CSRF保护,并配置了一些URL模式,其中/api/authenticate对于所有用户都是可用的,其他URL需要进行身份验证。我们还设置了会话管理策略为STATELESS,因为JWT令牌是无状态的,不需要在服务器端存储任何会话信息。最后,我们添加了自定义的AuthenticationFilter。
以上是启用Spring Security JWT身份验证的基本步骤。实际应用中可能还需要进行其他配置和调整,具体取决于应用的要求和场景。
阅读全文