Filter和Interceptor
- Filter的使用
- 拦截user下的所有请求
@WebFilter("/user/*")
public class UserFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)servletRequest;
HttpSession session = req.getSession();
if(session.getAttribute("user") != null){
//已登录
//放行
filterChain.doFilter(servletRequest,servletResponse);
}else {
req.setAttribute("msg","此操作需要登录,请先登录");
req.getRequestDispatcher("/index.jsp").forward(req,servletResponse);
}
}
@Override
public void destroy() {
}
}
- Interceptor的使用
- 实现HandlerInterceptor接口
public class MyFirstInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("first preHandle");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("first postHandle");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("first afterCompletion");
}
}
- 配置拦截器
<!--拦截器配置-->
<mvc:interceptors>
<!--配置某个拦截器-->
<bean class="com.xj.controller.MyFirstInterceptor"></bean>
!或!
<!--配置某个拦截器更详细的信息-->
<!--<mvc:interceptor>-->
<!--<mvc:mapping path="test01"/>-->
<!--<bean class="com.xj.controller.MyFirstInterceptor"></bean>-->
<!--</mvc:interceptor>-->
</mvc:interceptors>
- 1.拦截器正常流程
- 拦截器的preHandle->目标方法->拦截器postHandle->页面->拦截器的afterCompletion;
- 2.拦截器其他流程
- 只要preHandle不放行就没有以后的流程;
- 只要放行了,afterCompletion都会执行;
- 3.异常流程
- 哪一块不放行从此以后都没有;
例如:MySecondInterceptor不放行;但是他前面已经放行了的拦截器(MyFirstInterceptor)的afterCompletion还是会执行;
总结:
拦截器的preHandle :是按照顺序执行
拦截器的postHandle :是按照逆序执行
拦截器的afterCompletion :是按照逆序执行;
已经放行了的拦截器的afterCompletion总会执行;
- 什么时候用Filter什么时候用拦截器?
如果某些功能,需要其他组件配合完成,我们就使用拦截器;例如拦截前查询数据库数据,可以再拦截器中@autowired自动注入mapper查数据
其他情况可以写filter :
Filter和Interceptor的更多相关文章
- servlet/filter/listener/interceptor区别与联系
转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...
- 非spring组件servlet、filter、interceptor中注入spring bean
问题:在filter和interceptor中经常需要调用Spring的bean,filter也是配置在web.xml中的,请问一下这样调用的话,filter中调用Spring的某个bean,这个be ...
- Filter、Interceptor、Aspect 区别及实现
Fliter 过滤器 请求在到达Controller之前进行与返回去之后 调用 入参为 reuqest,response,chian,过滤器获取不了具体调用哪一个类,哪一个方法. 实现: 1.继承 F ...
- 过滤器和拦截器filter和Interceptor的区别
1.创建一个Filter过滤器只需两个步骤 创建Filter处理类 web.xml文件中配置Filter 2.Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的 ...
- 【转】servlet/filter/listener/interceptor区别与联系
原文:https://www.cnblogs.com/doit8791/p/4209442.html 一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台 ...
- Filter,Interceptor和Aspect
过滤器使用的主要是反射 :拦截器使用的主要是回调 :AOP使用的主要是动态代理. 一个请求过来 ,先进行过滤器处理,看程序是否受理该请求.过滤器放过后, 程序中的拦截器进行处理,处理完后进入被AOP动 ...
- Spring 梳理 - filter、interceptor、aop实现与区别 -第一篇
前言 项目中我们经常需要对RESTful api进行拦截,主流实现方法有filter.interceptor.aop,先说一下他们各自的实现. Filter AnimalFilter实现javax.s ...
- spring boot 拦截 以及Filter和interceptor 、Aspect区别
一.通过Filter这个大家很熟悉了吧,这是java规范的一个过滤器,他会拦截请求.在springboot中一般有两种配置方式.这种过滤器拦截并不知道你用的是哪一个Controller处理也不知道你用 ...
- [转]web.xml中servlet ,filter ,listener ,interceptor的作用与区别
原文链接:https://blog.csdn.net/netdevgirl/article/details/51483273 一.概念: 1.servlet:servlet是一种运行服务器端的java ...
- servlet filter listener interceptor 知识点
这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下: 概念 生命周期 使命 servlet ...
随机推荐
- SpringBoot获取所有接口的路由
@Autowired WebApplicationContext applicationContext; @RequestMapping(value = "v1/getAllUrl" ...
- C# 启动 Flask for Python
概览 最近有个需求是通过c#代码来启动 python 脚本.嘿~嘿!!! 突发奇想~~既然可以启动 python 脚本,那也能启动 flask,于是开始着手操作. 先看gif图 准备 因为使用的是.N ...
- 多线程Synchronized的两种锁
Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果 Synchronized的两个用法: 1)对象锁 包括方法锁(默认锁对象为this当前实例对 ...
- Git(GitHub)配合TortoiseGit使用
1.首先下载安装配置Git 安装请参照 https://www.cnblogs.com/xueweisuoyong/p/11914045.html 配置请参照 https://www.jianshu. ...
- 前端下载文档的java工具类
package com.ry.project.util.commUtil;import freemarker.template.Configuration;import freemarker.temp ...
- 快速排序(C++)
快速排序 快速排序是面试中经常问到的排序算法 基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分记录继续进行排序,以达到整个序 ...
- Javascirpt 面向对象总结-公有/私有
虽说js是一门面向对象的语言,但是它并不像C++,C#,Java等那样,具有典型的面向对象的特征.因此在这里总结一下如何编写具有面向对象特征的程序. [私有变量] 在对象内部使用'var'关键字来声明 ...
- Qt5之坐标系统
窗口坐标为逻辑坐标,是基于视口坐标系的. 视口坐标为物理坐标,是基于绘图设备坐标系的 窗口坐标始终以视口坐标为最终目标进行映射: QPainter::setWindow 修改了窗口位置和大小(左上角重 ...
- blender skin modifier 太好玩了
https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/skin.html 只需要像画火柴人一样把点连起来,skin ...
- MySQL——字符集
-- 字符集:是一个系统支持的所有抽象字符的集合 MySQL数据库的字符集(包括两个部分): 1.字符集:character 2.校对规则:collation MySQL中常见的字符集: utf8 l ...