用springboot写一个token验证
时间: 2023-03-05 21:31:18 浏览: 65
SpringBoot提供了一个叫做Spring Security OAuth2的模块,可以实现token验证。可以查阅Spring Security OAuth2的官方文档,以及相关的博客和教程,以获得关于如何使用SpringBoot实现token验证的指导信息。
相关问题
springboot前后端使用token验证
在前后端分离的架构中,使用 Token 验证是一种常见的身份验证方式。下面是 Spring Boot 前后端使用 Token 验证的一般步骤:
1. 在后端生成 Token 并返回给前端。可以使用 JSON Web Token(JWT)等技术生成 Token。
2. 前端将 Token 存储在客户端(如 localStorage)。每次向后端发送请求时,在请求头中添加 Token。
3. 后端对请求进行拦截,验证 Token 是否有效。
下面是一个简单的示例:
1. 后端生成 Token
```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class TokenUtil {
private static final long EXPIRATION_TIME = 864_000_000; // 10天
private static final String SECRET = "secret"; // 这个要保密
private static final String TOKEN_PREFIX = "Bearer";
private static final String HEADER_STRING = "Authorization";
public static String generateToken(String username) {
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setExpiration(expirationDate)
.signWith(SignatureAlgorithm.HS512, SECRET)
.compact();
}
public static String getUsernameFromToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
}
```
2. 后端验证 Token
```java
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
private UserDetailsService userDetailsService;
public JwtAuthorizationFilter(AuthenticationManager authenticationManager, UserDetailsService userDetailsService) {
super(authenticationManager);
this.userDetailsService = userDetailsService;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
String header = request.getHeader(HEADER_STRING);
if (header == null || !header.startsWith(TOKEN_PREFIX)) {
chain.doFilter(request, response);
return;
}
String token = header.replace(TOKEN_PREFIX, "").trim();
String username = TokenUtil.getUsernameFromToken(token);
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
userDetails, null, userDetails.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
chain.doFilter(request, response);
}
}
```
3. 前端存储 Token
```javascript
// 登录成功后获取 Token 并存储
axios.post('/api/login', {
username: 'test',
password: 'test'
}).then(response => {
localStorage.setItem('token', response.data.token);
});
// 每次请求时添加 Token 到请求头
axios.get('/api/user', {
headers: {
Authorization: 'Bearer ' + localStorage.getItem('token')
}
});
```
这是一个简单的示例,实际应用中需要根据具体情况进行修改。
用springboot写token验证登录
使用springboot实现token验证登录需要使用JWT(JSON Web Token)技术,首先需要在Springboot项目中引入相关JWT依赖,然后实现登录API,利用JWT实现token认证,完成登陆功能。