Filter
Filter通常写一些通用代码,因为客户端和服务端交互都要通过Filter
Filter 使用
Filter和Servlet使用方法基本相同
- 实现类,实现Filter接口,重写方法,其中init()和destroy()生命周期方法
- 配置Filter拦截资源的路径:在类上定义@WebFilter注解
- 在doFilter方法上输出一句话测试,使用FilterChain放行
Filter 执行流程
执行逻辑
1. 执行放行前逻辑
2. 访问资源逻辑
3. 执行放行后逻辑
执行思路
执行Filter过滤器request有数据,response没有数据
- 放行前执行是对request数据进行处理
- 使用FilterChain执行放行,获得reponse数据
-
Filter 拦截路径配置
@WebFilter(“xxx”) 配置的路径是拦截路径
配置拦截hello.jsp后拦截器Filter生效
访问其他网页拦截器不生效
Filter 过滤器链
配置两个过滤器,同时配置过滤所有路径@WebFilter(“/*”) 执行逻辑先执行第一个过滤器
- 然后放行
- 在执行第二个过滤器然后方形到资源路径
- 访问资源路径后回到第二个过滤器
- 最后访问第一个过滤器
登录验证
在登录的servlet中判断用户登录是否登录,登录页面将用户存在session,通过session判断是否存在
- 登录则使用FilterChain放行
- 如果没有登录则给出信息并跳转登录页面
- 筛选器应该在登陆前做有关登录资源筛选
代码实现:
- 创建对应的filter包下创建LoginFilter类
- 在对应的LoginFliter写方法
- 使用@WebFilter(“/*”)拦截所有路径
- 对Session的User进行判断
- 因为Servlet的reques(ServletRequest)t和Filter的request(HttpServletRequest)不同需要强行转换
HttpServletRequest req = (HttpServletRequest) request;
2. 如果登录则放行,不登陆则设置信息跳转到登录页面
- 在对获取的路径以及Session进行判断
- 对拦截的相关的登录路径资源进行遍历并放行
- 使用return直接返回方法不进入下面的判断
Listener
Applacation监听
ServletContextListener是对整个Web应用监听
Session监听
Request监听
ServletContextListener使用
监听主要使用ServletContextListener的Spring监听整个Web项目