springboot使用jwt
时间: 2023-12-09 17:36:22 浏览: 102
在Spring Boot项目中使用JWT可以实现登录验证,具体步骤如下:
1. 引入依赖:在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
2. 生成token:在登录成功后,使用JWT生成token,将用户信息存储在token中。
```java
String token = Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SECRET.getBytes())
.compact();
```
3. 开放路径:在WebSecurityConfigurerAdapter中配置开放的路径,例如登录和注册页面。
```java
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/login", "/register");
}
```
4. 配置拦截器:在WebSecurityConfigurerAdapter中配置拦截器,对需要验证的请求进行拦截。
```java
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()))
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
```
5. 使用:在需要验证的请求中添加token,例如:
```java
@GetMapping("/user")
public String getUser(@RequestHeader("Authorization") String token) {
String username = jwtUtil.extractUsername(token.substring(7));
// 根据用户名获取用户信息
return "user";
}
```
6. 运行效果:运行项目,访问需要验证的请求时,如果没有token或者token验证失败,将返回401 Unauthorized。
阅读全文