拦截器生效

@Target :设定注解的使用范围

ElementType.METHOD :只能使用在类的方法上

@Retention :定义被它注解的注解保留多久

RetentionPolicy.RUNTIME :不仅被保存在class文件中,jvm加载class文件后,仍然存在

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TokenCheck {
    //是否校验token
    boolean required() default true;

}
public class TokenException extends Exception{
    public TokenException(String message) {
        super(message);
    }
}
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

StringUtils.isBlank() :是否为null,是否为"",是否为空字符串" "、制表符、换行符、换页符和回车,当不为空是返回false。

method.isAnnotationPresent(TokenCheck.class) 

TokenCheck注解是否method上

method.getAnnotation(TokenCheck.class)

返回元素指定类型的注解

HandlerMethod handlerMethod = (HandlerMethod)handler;
Method method = handlerMethod.getMethod(); 

获取拦截方法

public class AuthInterceptor implements HandlerInterceptor {

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

        System.out.println("拦截器进入");
        String token = request.getHeader("token");
        if(StringUtils.isBlank(token)){
            throw new TokenException("token为空");
        }

        HandlerMethod handlerMethod = (HandlerMethod)handler;
        Method method = handlerMethod.getMethod();
        if(method.isAnnotationPresent(TokenCheck.class)){
            TokenCheck annotation = method.getAnnotation(TokenCheck.class);
            if(annotation.required()){
                //校验token
                try {
                    JwtUtil.parseToken(token);
                    return true;
                }catch (Exception e){
                    throw new TokenException("token 异常");
                }
            }
        }
        return true;
    }
}
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/user-member/login");
    }

    @Bean
    public AuthInterceptor authInterceptor(){
        return new AuthInterceptor();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值