springboot项目使用拦截器和注解方式验证token


本文使用注解标注需要验证token的contoller,使用拦截器验证token

注解代码TokenCheck

用于标注需要验证token的contoller

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TokenCheck {
    boolean required() default true;
}

用于controller代码

直接在方法上加上@TokenCheck

@PostMapping("/edit")
    @TokenCheck
    public ResultWrapper edit(@RequestBody UmsMember umsMember){
        System.out.println("执行了edit");
        return umsMemberService.edit(umsMember);
    }

创建一个token异常

用于捕获异常

public class TokenException extends Exception {
    public TokenException(String message) {
        super(message);
    }
}

使用拦截器对这个token进行验证

public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {

        System.out.println("进入了拦截器");

        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        // 判断方法中是否有tokencheck注解
        if (method.isAnnotationPresent(TokenCheck.class)){
            // 获取token注解
            TokenCheck annotation = method.getAnnotation(TokenCheck.class);
            // 判断token默认值
            if (annotation.required()){
                // 获取请求token
                String token = request.getHeader("token");
                // 判断token是否为空
                if (StringUtils.isNullOrEmpty(token)){
                    // 是的话抛出token异常
                    throw new TokenException("token 为空");
                }
                // 解析token
                try {
                    JwtUtil.parseToken(token);
                } catch (Exception e){
                    throw new TokenException("token 异常");
                }

            }
            return true;
        }

        return false;



    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

将拦截器注册到mvc配置中

@Configuration
public class AuthInterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**");
    }
}

对token异常进行捕获

这部分就可以再全局异常捕获代码中添加就行了

@RestControllerAdvice
public class GlobalHandler {

    @ExceptionHandler(ArithmeticException.class)
    public ResultWrapper globalHandle(Exception e){
        return ResultWrapper.builder().code(501).msg(e.getMessage()).build();
    }

    @ExceptionHandler(TokenException.class)
    public ResultWrapper tokenCheckHandler(Exception e){
        return ResultWrapper.getFailBuilder().code(501).msg(e.getMessage()).build();
    }
}

结果展示

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot中,我们可以使用拦截器验证token拦截器是一种在请求处理之前或之后拦截请求的机制。我们可以在拦截器中编写代码来验证token,并在需要时拒绝请求。为了实现这个目标,我们需要编写一个自定义的拦截器类,并将其配置到Spring Boot应用程序中。 具体步骤如下: 1. 创建一个自定义的拦截器类,例如TokenInterceptor.java。 2. 在拦截器类中编写代码来验证token。可以使用第三方库,例如JWT,来验证token。 3. 创建一个拦截器配置类,例如InterceptorConfig.java。 4. 在拦截器配置类中注册自定义拦截器,并配置拦截器的拦截路径和排除路径。 5. 在Spring Boot应用程序中启用拦截器配置。 下面是一个简单的示例代码,演示如何在Spring Boot使用拦截器验证tokenTokenInterceptor.java: ``` public class TokenInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 验证token的代码 // 如果token验证失败,可以使用response对象返回错误信息 return true; } } ``` InterceptorConfig.java: ``` @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Autowired private TokenInterceptor tokenInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(tokenInterceptor) .addPathPatterns("/**") // 拦截所有请求 .excludePathPatterns("/login"); // 排除登录请求 } } ``` 在上面的示例代码中,我们创建了一个名为TokenInterceptor的自定义拦截器类,并实现了HandlerInterceptor接口。在preHandle方法中,我们可以编写代码来验证token。如果token验证失败,可以使用response对象返回错误信息。 然后,我们创建了一个名为InterceptorConfig的拦截器配置类,并实现了WebMvcConfigurer接口。在addInterceptors方法中,我们注册了TokenInterceptor拦截器,并配置了拦截路径和排除路径。在这个例子中,我们拦截了所有请求,但排除了/login请求。 最后,在Spring Boot应用程序中启用拦截器配置。这可以通过在应用程序类上添加@EnableWebMvc注解来实现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值