码迷,mamicode.com
首页 > 编程语言 > 详细

springboot里边拦截器的运用

时间:2019-11-10 11:55:43      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:token   ora   就是   xtend   art   except   with   int   headers   

建一个类去继承HandlerInterceptorAdapter

//直接复制就可用 实际项目中已测试
public class AuthorityInterceptor extends HandlerInterceptorAdapter {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.setContentType("application/json");
        response.setHeader("Cache-Control", "no-store");
        response.setCharacterEncoding("UTF-8");
        // 如果不是映射到方法直接通过
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
        // START 方法注解级拦截器
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        // 判断接口是否有token
        LoginRequired checkToken = method.getAnnotation(LoginRequired.class);
        // 有 @LoginRequired 注解,需要认证
        if (checkToken != null) {
            //这里边去写自己的逻辑  像我就是看请求头中是否携带token
        }
        return true;
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, X-Requested-With, token");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST, PUT, DELETE");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Max-Age", "3600");
    }

2.注解

@Target({ElementType.METHOD})//可用在方法名上
@Retention(RetentionPolicy.RUNTIME)//运行时有效
public @interface LoginRequired {
  //此注解直接打到需要验证的controller层的方法上(@LoginRequired) }

3.再来个配置类

@EnableWebMvc
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
    public void addInterceptors(InterceptorRegistry registry) {
        // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要授权
        registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**");
    }

    @Bean
    public AuthorityInterceptor AuthorityInterceptor() {
        return new AuthorityInterceptor();
    }
}

代码可直接贴 已测试

springboot里边拦截器的运用

标签:token   ora   就是   xtend   art   except   with   int   headers   

原文地址:https://www.cnblogs.com/guochenchen/p/11829162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!