springboot项目中token使用

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

客户端使用用户名跟密码请求登录;
服务端收到请求,去验证用户名与密码;
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

### SpringBoot 项目Token 的实现与管理 在 SpringBoot 项目中,Token 的实现与管理通常涉及 JWT(JSON Web Token)的生成、验证和管理。以下将详细介绍如何在 SpringBoot使用 JWT 实现 Token 的相关功能。 #### 1. 依赖注入 在 SpringBoot 项目中,需要引入相关的依赖来支持 JWT 的生成与解析。通常使用的库是 `jjwt`,它提供了便捷的方法来操作 JWT[^1]。 ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> ``` #### 2. 配置文件 在 `application.yml` 或 `application.properties` 文件中,配置 JWT 的密钥和过期时间等参数[^4]。 ```yaml jwt: secret: your-secret-key expiration: 86400 # 过期时间,单位秒 ``` #### 3. JWT 工具类 创建一个工具类用于生成和验证 JWT。以下是示例代码: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; public class JwtUtil { private static final String SECRET = "your-secret-key"; // 从配置文件读取 public String generateToken(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 86400 * 1000)) // 设置过期时间 .signWith(SignatureAlgorithm.HS512, SECRET) .compact(); } public Claims parseToken(String token) { return Jwts.parser() .setSigningKey(SECRET) .parseClaimsJws(token) .getBody(); } } ``` 上述代码展示了如何生成和解析 JWT。 #### 4. 登录接口 在用户登录时生成 Token 并返回给客户端。以下是示例代码: ```java @RestController @RequestMapping("/auth") public class AuthController { @Autowired private JwtUtil jwtUtil; @PostMapping("/login") public ResponseEntity<?> login(@RequestBody User user) { // 校验用户名和密码 if ("admin".equals(user.getUsername()) && "password".equals(user.getPassword())) { String token = jwtUtil.generateToken(user.getUsername()); return ResponseEntity.ok().body(Collections.singletonMap("token", token)); } else { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } } ``` #### 5. Token 验证过滤器 通过自定义过滤器拦截请求并验证 Token 的有效性。以下是示例代码: ```java public class JwtFilter extends OncePerRequestFilter { @Autowired private JwtUtil jwtUtil; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String authHeader = request.getHeader("Authorization"); if (authHeader != null && authHeader.startsWith("Bearer ")) { String token = authHeader.substring(7); try { jwtUtil.parseToken(token); // 验证 Token chain.doFilter(request, response); } catch (Exception e) { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid Token"); } } else { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Missing Token"); } } } ``` #### 6. Security 配置 在 Spring Security 中配置过滤器以保护资源。以下是示例代码: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private JwtFilter jwtFilter; @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/auth/login").permitAll() .anyRequest().authenticated() .and() .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class); } } ``` #### 7. Token 管理 Token 的管理包括刷新机制、黑名单处理等。可以通过数据库或缓存(如 Redis)存储已注销的 Token,防止被重复使用[^1]。 --- ### 总结 SpringBoot 项目使用 JWT 实现 Token 的生成、验证和管理是一种常见的实践方式。通过依赖注入、工具类、过滤器和安全配置,可以构建一个完整的认证与鉴权体系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值