springboot:token、interceptor的代码和注解

代码来源:Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证

代码1:annotation/token
@Target({
   ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface PassToken {
   
}

1、java元注解 @Target注解用法

@Target用于描述注解的使用范围

 /**用于描述类、接口(包括注解类型) 或enum声明*/
TYPE,

/** 用于描述域 Field declaration (includes enum constants) */
FIELD,

/**用于描述方法 Method declaration */
METHOD,

2、java元注解 @Retention注解使用

@Retention定义了该Annotation被保留的时间长短

RUNTIME:在运行时有效(即运行时保留)

3、整段代码含义:定义一个叫PassToken的注解,可以用在标记其他类和方法,并且这个注解是运行时有效的

4、 token 验证的机制(流程)

用户登录校验,校验成功后就返回Token给客户端。
客户端收到数据后保存在客户端
客户端每次访问API是携带Token到服务器端。
服务器端采用filter过滤器校验。
校验成功则返回请求数据,校验失败则返回错误码

5、token的pom依赖:jwt

        <dependency>
              <groupId>com.auth0</groupId>
              <artifactId>java-jwt</artifactId>
              <version>3.4.0</version>
        </dependency>
代码2:config/interceptor

新建一个拦截器配置,用于拦截前端请求,实现 WebMvcConfigurer

 8 @Configuration
 9 public class InterceptorConfig implements WebMvcConfigurer {
   
10     @Override
11     public void addInterceptors(InterceptorRegistry registry) {
   
12         registry.addInterceptor(authenticationInterceptor())
13                 .addPathPatterns("/**")
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是SpringBoot生成token的示例代码: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Date; @Component public class JwtUtils { @Value("${jwt.secret}") private String secret; @Value("${jwt.expire}") private long expire; /** * 生成token * @param userId 用户ID * @return token */ public String generateToken(Long userId) { Date nowDate = new Date(); // 过期时间 Date expireDate = new Date(nowDate.getTime() + expire * 1000); return Jwts.builder() .setHeaderParam("typ", "JWT") .setSubject(userId.toString()) .setIssuedAt(nowDate) .setExpiration(expireDate) .signWith(SignatureAlgorithm.HS512, secret) .compact(); } /** * 根据token获取用户ID * @param token token * @return 用户ID */ public Long getUserId(String token) { Claims claims = Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); return Long.parseLong(claims.getSubject()); } /** * 判断token是否过期 * @param token token * @return 是否过期 */ public boolean isTokenExpired(String token) { Claims claims = Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); Date expiration = claims.getExpiration(); return expiration.before(new Date()); } } ``` 上述代码中,使用了Java JWT库来生成token,其中包含了三个方法: - `generateToken`:根据用户ID生成token。 - `getUserId`:根据token获取用户ID。 - `isTokenExpired`:判断token是否过期。 在这个示例中,还使用了`@Value`注解来注入配置文件中的`jwt.secret`和`jwt.expire`值。需要在配置文件中添加以下配置项: ```yaml jwt: secret: mySecret expire: 3600 ``` 其中,`secret`为加密密钥,`expire`为token的过期时间,单位为秒。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值