美文网首页
Spring boot 之interceptor

Spring boot 之interceptor

作者: 黑曼巴yk | 来源:发表于2020-09-25 01:31 被阅读0次

    前言

    Interceptor 和Filter都属于AOP思想。Filter定义在javax.servlet中。而Interceptor定义在springframework中。并且能够深入到方法的前后,使用起来更大的弹性。

    使用

    @Slf4j
    @Component
    public class RequestInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // do somting
            return true;
        }
    }
    

    注册

    @Configuration
    public class MambaWebmvcConfiguration implements WebMvcConfigurer {
        @Autowired
        RequestInterceptor requestInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(requestInterceptor).addPathPatterns("/**");
           
        }
    }
    

    注意:不要抄网上代码: registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/**");
    使用new 格式不会Spring接管,所以在内部使用Autoware注解不生效

    实践(基于注解配置权限拦截)

    1. 创建注解
    /**
     * 在需要登录验证的Controller的方法上使用此注解
     */
    @Target({ElementType.METHOD})// 可用在方法名上
    @Retention(RetentionPolicy.RUNTIME)// 运行时有效
    public @interface LoginRequired {
        
    }
    
    1. 创建拦截器
    public class AuthorityInterceptor extends HandlerInterceptorAdapter{
        
         @Override
         public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 如果不是映射到方法直接通过
            if (!(handler instanceof HandlerMethod)) {
                return true;
            }
            // ①:START 方法注解级拦截器
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            Method method = handlerMethod.getMethod();
            // 判断接口是否需要登录
            LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class);
            // 有 @LoginRequired 注解,需要认证
            if (methodAnnotation != null) {
                // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等
                System.out.println("====================================");
                return true;
            }
            return true;
        }
    }
    

    相关文章

      网友评论

          本文标题:Spring boot 之interceptor

          本文链接:https://www.haomeiwen.com/subject/epdxuktx.html