spring boot(19)-拦截器
来源:互联网 发布:电动牙刷当跳蛋 知乎 编辑:程序博客网 时间:2024/06/17 03:27
动态资源和静态资源
拦截器可以算是aop的一种实现,专门拦截对动态资源的后台请求,也就是拦截对控制层的请求,主要用于判断用户是否有权限请求后台。拦截器不会拦截静态资源,如spring boot的默认静态目录resources/static,请求其目录下的html,js,图片等都不会被拦截。因为我们的业务机密数据都在后台,而前端的静态资源可以分离出来放在静态服务器以缓解后台服务器的压力,不过这不是本篇要讨论的内容。这也是第三篇说用静态html+rest替换动态jsp的原因之一
声明拦截器
- public class MyInterceptor implements HandlerInterceptor {
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
- System.out.println("在请求前执行");
- return true;// 返回true表示拦截通过,返回false拦截不通过,取消当前请求,返回空白
- }
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView){
- System.out.println("在请求不报异常,顺利完成后执行");
- }
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
- System.out.println("无论请求是否异常,最后都会执行。用于清理资源,关闭连接等");
- }
- }
配置拦截器
- @SpringBootConfiguration
- public class Mvc extends WebMvcConfigurerAdapter {
- public void addInterceptors(InterceptorRegistry registry) {
- // addPathPatterns:添加拦截规则 excludePathPatterns: 排除拦截规则
- registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/error");
- }
- }
/**表示所有的请求url,包括子路径。/error是spring boot中的默认处理异常的url,所以排除掉,不拦截它。
另外可以查看WebMvcConfigurerAdapter源码,在这里重写其他方法可以实现其他的mvc相关配置
拦截器和过滤器
有不少人喜欢把拦截器和过滤器拿来比较,上一篇我讲了过滤器,也解释了先有servlet,然后才是spring mvc。同理,首先会执行过滤器,然后才是拦截器。过滤器属于servlet技术,所以可以过滤servlet和spring mvc的请求。而拦截器属于spring,所以只能拦截spring mvc,无法拦截servlet,具体原因我在上一篇结尾已经讲过。至于他们的功能有什么区别,哪个更好,并没有必要纠结。如果项目用了spring,拦截器可以和spring更好的融合,可以自动识别spring boot静态资源。如果项目没有用spring只用了servlet,就肯定用过滤器阅读全文
0 0
- spring boot(19)-拦截器
- spring boot(19)-拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring-Boot拦截器
- spring boot 拦截器
- Spring Boot拦截器
- spring boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- spring boot 拦截器:拦截404、500
- Spring boot配置拦截器
- THinkphp教程网址
- spring boot(18)-servlet、filter、listener
- hdu 6216 A Cubic number and A Cubic Number
- Version
- 将 Spark 中的文本转换为 Parquet 以提升性能
- spring boot(19)-拦截器
- 按照百分比分割页面
- 支付宝微信扫码支付样式
- 抽象工厂模式
- javaweb报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Pat
- MySQL update 嵌套 select
- nuke开发钉钉微应用界面踩坑之旅(一)
- python入门系列10:函数1
- 打开APP协议