(十九)SpringBoot2.0整合拦截器

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/IT_hejinrong/article/details/89359691

一. 拦截器

创建模拟登录拦截器,验证请求是否有token参数

1.1 创建拦截器

/**
 * @author: hejr
 * @desc: 登录拦截器
 * @date: 2019/4/17 9:19
 */
@Slf4j
class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("开始拦截登录请求....");
        String token = request.getParameter("token");
        if (StringUtils.isEmpty(token)) {
            response.getWriter().println("not found token");
            return false;
        }
        return true;
    }
}

1.2 注册拦截器

/**
 * @author: hejr
 * @desc: 注册拦截器
 * @date: 2019/4/17 9:21
 */
@Configuration
class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public LoginInterceptor loginInterceptor() {
        return new LoginInterceptor();
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/index.html").setViewName("login");

    }
    /**
     * 拦截所有请求,除了登录,首页,错误页面
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/","user/login","/index.html","/error.html")
                .excludePathPatterns("/public/**","/resources/**");
    }

    /**
     * 静态资源目录放开
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**","/public/**")
                .addResourceLocations("classpath:/resources/","classpath:/public/");
    }
}

1.3 拦截演示

浏览器输入地址:http://localhost:8800/user/findUserList
返回结果:not found token
加上token条件:http://localhost:8800/user/findUserList?token=SDFSDFSD
返回真实结果!!!!

二. 拦截器与过滤器的区别

拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式完成。
(1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。
(2)拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
(3)拦截器只能对Controller请求起作用,而过滤器则可以对几乎所有的请求起作用。
(4)在Controller的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

过滤器应用场景:设置编码字符、过滤铭感字符
拦截器应用场景:拦截未登陆用户、审计日志()

三. 源码下载

https://gitee.com/hejr.cn.com/SpringBoot2.0_2019/tree/master/springboot2_11_interceptor

下一篇:(二十)SpringBoot2.0实现企业微信公众号项目

猜你喜欢

转载自blog.csdn.net/IT_hejinrong/article/details/89359691
今日推荐