项目中添加token校验的注解

实现并使用一个注解需要实现四步:

1、创建注解

2、创建拦截器,拦截注解并处理

3、注册拦截器

4、使用注解

 

 

1、创建一个注解

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

2、添加拦截器,实现HandlerInterceptor 接口

import com.msb.dongbao.common.base.annotations.TokenCheck;
import com.msb.dongbao.common.base.exceptions.TokenException;
import com.msb.dongbao.common.util.jwt.JwtUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;



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.isEmpty(token)){
            throw new TokenException("token 为空");
        }
        //获取对应的方法
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        //判断方法是否有TokenCheck注解
        if (method.isAnnotationPresent(TokenCheck.class)) {
            TokenCheck annotation = method.getAnnotation(TokenCheck.class);
            //如果有注解,并且注解值为true,进行校验token
            if(annotation.required()){
                //校验touken
                try{
                    JwtUtil.parseToken(token);
                    return true;
                } catch (Exception e){
                    throw new TokenException("token 校验失败");
                }
            }
        }
        return true;
    }

    @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 {

    }
}

3、注册拦截器,实现WebMvcConfigurer ,并指定拦截的url和不拦截的url

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;




@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

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

    @Bean
    public AuthInterceptor authInterceptor(){
        return new AuthInterceptor();
    }
}

4、使用注解

@PostMapping("/updateUser")
@TokenCheck
public String updateUser(@RequestBody UserMemberDTO userMemberDTO){
   return umsMemberService.updateUser();
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值