java 拦截器的作用?
转载注明出处~
1.拦截器都是做什么的?
做的事和请求和响应有关。(比如前端的css或者一些加载的路径都会走这个拦截器)
访问日志(记录访客的ip,来源),在线统计人数,字符集转换,身份验证
可以不破坏你的业务逻辑 在你的业务之外做一些其他事情~
.过滤器(Filter):所谓过滤器顾名思义是用来过滤的,Java的过滤器能够为我们提供系统级别的过滤,也就是说,能过滤所有的web请求,
这一点,是拦截器无法做到的。在Java Web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或
者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts
的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。filter 流程是线性的,url传来之后,检查之后,
可保持原来的流程继续向下执行,被下一个filter, servlet接收。
2.监听器(Listener):Java的监听器,也是系统级别的监听。监听器随web应用的启动而启动。Java的监听器在c/s模式里面经常用到,它
会对特定的事件产生产生一个处理。监听在很多模式下用到,比如说观察者模式,就是一个使用监听器来实现的,在比如统计网站的在线人数。
又比如struts2可以用监听来启动。Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。
3.拦截器(Interceptor):java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。
Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间动态生成字节码。
拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其
执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或
者之后加入某些操作。java的拦截器主要是用在插件上,扩展件上比如 Hibernate Spring Struts2等,有点类似面向切片的技术,在用之前先要在
配置文件即xml,文件里声明一段的那个东西。转自:https://www.cnblogs.com/austinspark-jessylu/p/7453302.html
通过项目的调试,在自己的项目中,拦截器是要取一下token的,然后从redis中获取到用户的信息。
比如:
private void conversionUserInfo(HttpServletRequest request, String authToken) {try {Object obj = redisService.get(authToken);if (null != obj) {UserInfo userInfo = (UserInfo) obj;request.setAttribute("requestUserName", "LOGIN_" + userInfo.getUserName());} else {request.setAttribute("requestUserName", "LOGIN_UNKNOWN_USER");}} catch (Exception e) {log.error("[BaseInterceptor] 失败; error message = {}", e.getMessage());}}
在preHandle之后,便要进行postHandle也就是把刚刚set进去的属性,打印出来~
比如打印一下请求开始的时间,还有从预处理到preHandle的时间。
打印日志可以追加一下请求的URI 还有请求的类型,是POST还是GET等等
private StringBuilder prepareRequestContentLog(HttpServletRequest request, String username, Long timeDiff) {StringBuilder content = new StringBuilder();content.append("[");content.append(username);content.append("] ");if (timeDiff != null) {content.append("[");content.append(timeDiff);content.append("ms] ");}content.append(request.getRequestURI());String method = request.getMethod();if ("POST".equals(method)) {appendPostParams(content, request);} else if ("GET".equals(method)) {appendGetParams(content, request);}return content;}
2. 获取POST请求中的参数,并打印(使用request.getParameterMap();)
private void appendPostParams(StringBuilder content, HttpServletRequest request) {Map parameterMap = request.getParameterMap();if (parameterMap != null && parameterMap.size() != 0) {content.append("?");for (Object key : parameterMap.keySet()) {content.append(key);content.append("=");content.append(request.getParameterValues(key.toString())[0]);content.append("&");}content.deleteCharAt(content.length() - 1);}}
3. 获取GET请求的参数,并打印(使用request.getQueryString();)
private void appendGetParams(StringBuilder content, HttpServletRequest request) {String queryString = request.getQueryString();if (!StringUtils.isBlank(queryString)) {content.append("?");content.append(queryString);}}
4. StringBuffer的delete方法与deleteCharAt的区别
delete方法与deleteCharAt两个方法都是用来删除StringBuffer字符串指定索引字符的方法,
delete(int a,int b)有两个参数,使用时删除索引从a开始(包含a)到b(不包含b)的所有字符;
deleteCharAt(int a)只有一个参数,使用时删除索引为a的字符;
5. @Nullable ModelAndView modelAndView
- @NonNull可以标注在方法、字段、参数之上,表示对应的值不可以为空
- @Nullable注解可以标注在方法、字段、参数之上,表示对应的值可以为空
ModelAndView :
在我们项目中这一项是为null,也没有用到。 这个是以前会用到的东西 现在HTML和接口分离。也就不怎么用了
ModelAndView包含两部分:一个View和一个Model
View由setViewName()方法来决定,决定让ViewResolver去哪里找View文件,并找到是哪个jsp文件;
Model由addObject()方法来决定,它的本质是java的HashMap,键值对;
核心就是Object\LinkedHashMap,完全是Java的标准容器(对象)。
参考:https://www.cnblogs.com/zhuchuanliang/p/7784772.html
6. HttpServletRequest 请求中都有什么?剖析?
java 拦截器的作用?相关推荐
- 区分Java拦截器和过滤器
今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...
- Spring中的拦截器的作用
Spring中的拦截器的作用 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现特定的功能. 谈到拦截器 ...
- java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高
java拦截器项目应用 在开发具有某些性能要求的Java EE应用程序时,必须在每个发行版之前验证是否满足这些要求. 您可能会想到,哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量. ...
- java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断 ...
- JAVA拦截器(Interceptor)实现以及原码示例
JAVA拦截器(Interceptor)实现以及原码示例 概念 SpringMVC中拦截器[interceptor] 一.实现拦截器代码 二.单/多 个拦截器运行 1.单个拦截器 2.多个拦截器 源码 ...
- Redis + Java拦截器实现用户匿名和非匿名访问
文章目录 需求 实现截图 核心代码 WebMvcConfigurer HandlerInterceptor 判断用户是否有权限 ThreadLocal 该篇文章以<Redis实现短信验证码登录& ...
- java 拦截器顺序_Springmvc拦截器执行顺序及各方法作用详解
实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...
- java拦截器_Java工程师年底跳槽高潮即将到来,斩获满意offer的必备技巧(二)
哈喽,大家好,相信看过小编Java工程师年底跳槽高潮即将到来,斩获满意offer的必备技巧(一)文章的朋友应该就比较的了解这里都是干货,希望这些干货能够助大家在这2019-2020年关跳槽季斩获满意的 ...
- java 拦截器和过滤器区别(转载)
2019独角兽企业重金招聘Python工程师标准>>> 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servl ...
最新文章
- View工作原理(二)导致View重建原因
- 李沐等将目标检测绝对精度提升 5%,不牺牲推理速度
- 实例手册_独家数据 | 1820Fall 香港研究生商科类14个热门专业 1400+申请实例汇总...
- 插件修复数据_APP 热修复都懂了,你会 SDK 热修复吗?最全方案在这里!
- Werkzeug教程
- Android Exception 8(Couldn't read row 0, col -1 from CursorWindow)
- 【无标题】排序算法(C语言)
- 《图论及其应用》学习笔记(树)
- 单相电能量计算机公式,电能与电压电流的关系及计算公式详解
- C++入门:让计算机“开口说话”
- php执行fastlane,Fastlane使用说明 自动化打包
- POJ1759Garland题解
- ## Myql的常见命令及语法规范
- 创维E900V22C、E900V22D系列-UWE5621DS芯片语音免拆卡刷固件(当贝桌面)《虎年新春开机动画》
- Axure如何填充背景图
- Windows 10新版可以更新了!这些新功能值得升级
- android 的悬浮窗口,Android 之 悬浮窗口
- 小草说----大数据和机器学习为什么这样火
- 拜读台湾清华大学彭明辉教授研究生手册笔记
- java队列实现入队push和出队pop