企业网站建设的背景和目的百度爱采购优化软件
news/
2025/9/23 7:15:09/
文章来源:
企业网站建设的背景和目的,百度爱采购优化软件,毕节建设网站,徽章设计制作网站目录 spring中拦截器
过滤器跟拦截器的区别
HandlerInterceptor拦截器
拦截器工作原理
拦截器使用场景
定义拦截器
LoginInterceptor
注册拦截器 MethodInterceptor拦截器
方式一#xff1a;继承 MethodInterceptor
方式二#xff1a;基于注解的AspectJ方…目录 spring中拦截器
过滤器跟拦截器的区别
HandlerInterceptor拦截器
拦截器工作原理
拦截器使用场景
定义拦截器
LoginInterceptor
注册拦截器 MethodInterceptor拦截器
方式一继承 MethodInterceptor
方式二基于注解的AspectJ方式
HandlerInterceptor拦截器与MethodInterceptor拦截器总结 spring中拦截器
在说拦截器之前不得不说一下过滤器有时候往往被这两个词搞的头大。
其实我们最先接触的就是过滤器
你应该知道spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件的如果想要拦截那怎么办
这就用到过滤器filter了filter是在servlet前执行的你也可以理解成过滤器中包含拦截器一个请求过来 先进行过滤器处理看程序是否受理该请求 。 过滤器放过后 程序中的拦截器进行处理 。
过滤器跟拦截器的区别 1、拦截器是基于java的反射机制的而过滤器是基于函数回调职责链
2、过滤器依赖与servlet容器而拦截器不依赖与servlet容器
3、拦截器只能对action请求起作用而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象而过滤器不能
5、在action的生命周期中拦截器可以多次被调用而过滤器只能在容器初始化时被调用一次
6、拦截器可以获取IOC容器中的各个bean而过滤器不行这点很重要在拦截器里注入一个service可以调用业务逻辑。
7、过滤器属于Servlet而拦截器属于springmvc
8、过滤器可以拦截所有请求包括访问静态资源的请求拦截器只能拦截action请求即访问controller的请求。
1过滤器Filter当你有一堆东西的时候你只希望选择符合你要求的某一些东西。定义这些要求的工具就是过滤器。理解就是一堆字母中取一个B
2拦截器Interceptor在一个流程正在进行的时候你希望干预它的进展甚至终止它进行这是拦截器做的事情。理解就是一堆字母中干预他通过验证的少点顺便干点别的东西。
HandlerInterceptor拦截器
HandlerInterceptor是springMVC项目中的拦截器它拦截的目标是请求的地址比MethodInterceptor先执行。
实现一个HandlerInterceptor拦截器可以直接实现HandlerInterceptor接口也可以继承HandlerInterceptorAdapter类。
这两种方法殊途同归其实HandlerInterceptorAdapter也就是声明了HandlerInterceptor接口中所有方法的默认实现而我们在继承他之后只需要重写必要的方法。
拦截器主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能Spring Boot 同样提供了拦截器功能 拦截器工作原理 一个拦截器只有 preHandle 方法返回 true postHandle 、 afterCompletion 才有可能被执行如果 preHandle 方法返回 false 则该拦截器的 postHandle 、 afterCompletion 必然不会被执行。拦截器不是Filter却实现了Filter的功能其原理在于 所有的拦截器 (Interceptor) 和处理器 (Handler) 都注册在 HandlerMapping 中。 Spring MVC 中所有的请求都是由 DispatcherServlet 分发的。 当请求进入 DispatcherServlet.doDispatch() 时候首先会得到处理该请求的 Handler 即 Controller 中对应的方法以及所有拦截该请求的拦截器。拦截器就是在这里被调用开始工作的。
拦截器使用场景 拦截器本质上是面向切面编程AOP符合横切关注点的功能都可以放在拦截器中来实现主要的应用场景包括 -登录验证判断用户是否登录。 -权限验证判断用户是否有权限访问资源如校验token - 日志记录记录请求操作日志用户ip访问时间等以便统计请求访问量。 -处理cookie、本地化、国际化、主题等。 -性能监控监控请求处理时长等。 定义拦截器
在 Spring Boot 中定义拦截器十分的简单只需要创建一个拦截器类并实现 HandlerInterceptor 接口即可。
HandlerInterceptor 接口中定义以下 3 个方法如下表。 返回值类型 方法声明 描述 boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 该方法在控制器处理请求方法前执行其返回值表示是否中断后续操作返回 true 表示继续向下执行返回 false 表示中断后续操作。 void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) 该方法在控制器处理请求方法调用之后、解析视图之前执行可以通过此方法对请求域中的模型和视图做进一步修改。 void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) 该方法在视图渲染结束后执行可以通过此方法实现资源清理、记录日志信息等工作。 LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor {private final Logger logger LoggerFactory.getLogger(LoginInterceptor.class);Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String requestURI request.getRequestURI();log.info(请求的URI,requestURI);String token request.getParameter(token);if(StrUtil.isEmpty(token)){response.sendRedirect(/login);}return true;}
}
注册拦截器
Configuration
public class MyMvcConfig implements WebMvcConfigurer {......Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**) //拦截所有请求包括静态资源文件.excludePathPatterns(/register, /login, /css/**, /images/**, /js/**); //放行登录页登陆操作静态资源}
}
在指定拦截器拦截规则时调用了两个方法这两个方法的说明如下 addPathPatterns该方法用于指定拦截路径例如拦截路径为“/**”表示拦截所有请求包括对静态资源的请求。 excludePathPatterns该方法用于排除拦截路径即指定不需要被拦截器拦截的请求。 MethodInterceptor拦截器
MethodInterceptor是AOP项目中的拦截器它拦截的目标是方法即使不是controller中的方法。实现MethodInterceptor拦截器大致也分为两种一种是实现MethodInterceptor接口另一种利用AspectJ的注解或配置。
方式一继承 MethodInterceptor
public class MethodInvokeInterceptor implements MethodInterceptor { Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { System.out.println(before method invoke); Object object methodInvocation.proceed(); System.out.println(after method invoke); return object; }
} 方式二基于注解的AspectJ方式
Component
Aspect
public class AutoAspectJInterceptor { Around(execution (* com.test.controller..*.*(..))) public Object around(ProceedingJoinPoint point) throws Throwable{ System.out.println(AutoAspectJInterceptor begin around); Object object point.proceed(); System.out.println(AutoAspectJInterceptor end around); return object; } } HandlerInterceptor拦截器与MethodInterceptor拦截器总结
HandlerInterceptor拦截的是请求地址所以针对请求地址做一些验证、预处理等操作比较合适。当你需要统计请求的响应时间时MethodInterceptor将不太容易做到因为它可能跨越很多方法或者只涉及到已经定义好的方法中一部分代码。MethodInterceptor利用的是AOP的实现机制在对一些普通的方法上的拦截HandlerInterceptoer就无能为力了这时候只能利用AOP的MethodInterceptor。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911714.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!