javaDEMO
本网站记录了最全的各种 JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring 的, Mybatis 的等等各种,助力你从菜鸟到大牛,记得收藏哦~~ https://www.javastudy.cloud
springboot 配置拦截器
在 springboot 中配置拦截器大体上分为以下几步
1.引入相关的依赖
2.新建拦截器
3.配置拦截器 Bean
虽然网上有很多配置方法,但是我更倾向于官方文件的配置方法,在以后的 DEMO 中也会是尽量和官方文档进行贴合
参考文档:https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#mvc-config-interceptors
引入依赖
只需要引一个 web 的依赖就可以了
implementation 'org.springframework.boot:spring-boot-starter-web'
新建拦截器
如果不知道如何新建,可以参考 Spring 源码中的 LocaleChangeInterceptor
/**
* 测试拦截器,继承的类参考 Spring源码中LocaleChangeInterceptor
* 和ThemeChangeInterceptor写法
* @Author https://www.javastudy.cloud
* @CreateTime 2019/11/8
**/
public class TestInterceptor extends HandlerInterceptorAdapter {
/**
* 这个方法在HandlerMapping找到对应的处理对象,但还没有请求这个对象时处理
* 也就是在Controller的方法之前执行
*
* @param request
* @param response
* @param handler 这个参数就是代码着Controller的方法
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("run in pre Handle");
return true;
}
/**
* 在Handler/controller的方法处理完逻辑,渲染视图之前执行
*
* @param request
* @param response
* @param handler
* @param modelAndView
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("run in post Handle");
}
/**
* 在视图渲染完之后执行,常用于资源清理等等
*
* @param request
* @param response
* @param handler
* @param ex
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
配置拦截器 Bean
不知道如何配置的同学可以参考上述给出的 spring 官方文档
/**
* @Author https://www.javastudy.cloud
* @CreateTime 2019/11/8
**/
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
/**
* 在这里添加自己定义的拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TestInterceptor())
// 只拦截test路径
.addPathPatterns("/test/**")
// 不拦截pass路径
.excludePathPatterns("/pass/**");
}
}
编写测试的 controller
这块就写的很随意了
/**
* @Author https://www.javastudy.cloud
* @CreateTime 2019/11/8
**/
@RestController
public class TestController {
@RequestMapping("test/testInterceptor")
public String testInterceptor(){
System.out.println("in test method");
return "";
}
@RequestMapping("pass/testPass")
public String testPass(){
System.out.println("in pass method");
return "";
}
}
结果输出
走拦截器的情况
不走拦截器的情况
DEMO 总评
拦截器是 Web 中的一大核心概念,我们常常拿拦截器与过滤器进行比较,通过代码可简单总结,拦截器是基于 springMVC 的,拦截器是只对 Controller 方法做修改.等等还有很多特性小伙伴们可以自行总结下,常见用法,如文档中所示,可用于本地化,可用于安全验证等等
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于