Filter拦截器从入门到快速上手与Listener监听器概述
前置内容:
1、 过滤器Filter
1.1 Filter快速入门
使用步骤
- 定义类并实现Filter接口
- 定义@WebFilter注解,配置拦截路径
- 放行
- (请求其他资源)
Demo
package priv.dandelion.controller.filter; import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException; @WebFilter("/*")
public class FilterDemo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 放行前逻辑
System.out.println("FilterDemo..."); // 放行
filterChain.doFilter(servletRequest, servletResponse); // 放行后逻辑
} @Override
public void destroy() { }
}
1.2 Filter执行流程
- 浏览器发送请求到服务器
- Filter拦截请求
- 执行放行前逻辑
- 放行请求
- 访问对应资源
- 执行放行后逻辑
- 服务器对浏览器做出响应
1.3 Filter使用细节
拦截路径配置
- 拦截具体资源:
/index.jsp - 目录拦截:
/user/* - 后缀名拦截:
*.jsp - 拦截所有:
/*
- 拦截具体资源:
过滤器链
一个Web应用可以配置多个过滤器,多个过滤器成为过滤器链
- 多个过滤器逐一放行
- 请求资源
- 按照递归顺序执行过滤器链的放行后逻辑
过滤器链的过滤顺序
- 若使用注解配置过滤器,则按照全类名进行排序,即为过滤器链的执行顺序
- 可在XML中配置顺序
1.4 案例
需求
- 访问服务器资源时,需要先进行登录验证,如果没有登录则自动跳转到登录页面
方式
- 判断请求资源是否和登录注册相关,若是则放行
- 判断Session中是否有User对象,若有则放行,否则跳转到登录
环境准备
环境和案例框架见:用户登录注册案例
代码实现
package priv.dandelion.controller.filter; import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; @WebFilter("/*")
public class LoginFilter 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; // 判断访问的资源是否和登录注册相关
String[] urls = {"/login.jsp", "/register.jsp", "/imgs/", "/css/", "/login", "/register", "/checkCode"};
// 获取当前访问资源的路径
String requestURL = req.getRequestURL().toString(); for (String url : urls) {
if (requestURL.contains(url)) {
// 若为和登录注册相关的资源,则放行并直接结束过滤器执行
System.out.println(url);
filterChain.doFilter(req, servletResponse);
return;
}
} // 判断Session中是否有user
// 获取Session
Object user = req.getSession().getAttribute("user"); if (user != null) {
// 放行
System.out.println("已登录,放行"+ user);
filterChain.doFilter(servletRequest, servletResponse);
} else {
// 存储提示信息,拦截跳转到登录页面
System.out.println("未登录,将跳转到登录页面");
req.setAttribute("login_msg", "您尚未登录!");
req.getRequestDispatcher("/login.jsp").forward(req, servletResponse);
} } @Override
public void destroy() { }
}
2、 监听器Listener概述
2.1 概述
Listener 表示监听器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。
监听器可以监听就是在
application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。application是ServletContext类型的对象。ServletContext代表整个web应用,在服务器启动的时候,tomcat会自动创建该对象。在服务器关闭时会自动销毁该对象。
2.2 分类
| 监听器分类 | 监听器名称 | 作用 |
|---|---|---|
| ServletContext监听 | ServletContextListener | 用于对ServletContext对象进行监听(创建、销毁) |
| :: | ServletContextAttributeLintener | 用于对ServletContext对象中的属性的监听(增删改属性) |
| Session监听 | HttpSessionListener | 对Session对象的整体状态监听(创建、销毁) |
| :: | HttpSessionAttributeLintener | 对Session对象中的属性的监听(增删改属性) |
| :: | HttpSessionBindingListener | 监听对象与Session的绑定和解除 |
| :: | HttpSessionActivationListener | 对Session数据的钝化和活化的监听 |
| Request监听 | ServletRequestListener | 对Request对象的监听(创建、销毁) |
| :: | ServletRequestAttributeListener | 对Request对象中属性的监听(增删改属性) |
2.3 代码演示
package priv.dandelion.controller.Listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ContextLoaderListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
// 加载资源
System.out.println("ContextLoaderListener initialized...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
// 释放资源
System.out.println("ContextLoaderListener destroyed...");
}
}
Filter拦截器从入门到快速上手与Listener监听器概述的更多相关文章
- Flask入门和快速上手
目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...
- java:(json,ajax,path,Oracle的分页实例,Filter拦截器)
1.json: <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...
- Java filter拦截器的使用
1.web.xml配置 <!-- 验证是否登录 拦截功能 --> <filter> <filter-name>isLogin</filter-name> ...
- spring filter拦截器
实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面.比较好的做法是不管什么人都不能直接访问jsp页面,要访问就通过action,这样就变成了一个实实在在的权限 ...
- pc/移动端(手机端)浏览器的直播rtmp hls(适合入门者快速上手)
一.直播概述 关于直播,大概的过程是:推流端——>源站——>客户端拉流,用媒介播放 客户端所谓的拉流就是一个播放的地址url,会有多种类型的流: 视频直播服务目前支持三种直播协议,分别是R ...
- Filter拦截器和Listen监听器
Filte过滤器概述 1 过滤器是一个驻留在服务器端的Web组件,可以截取用户端和资源之间的请求响应信息,并对信息进行过滤 过滤的工作流程. 过滤器作用描述 1 ,在HttpServletReq ...
- MVC5-11 浅谈拦截器
Filter拦截器 Aop是MVC的主要设计方式之一,而微软也希望我们在使用MVC的时候更好的使用拦截器来进行切面编程.拦截器则是Mvc中的一大亮点与重点 AOP(面向切面)编程已经广泛应用在各个项目 ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- SpringMVC拦截器(慕课网)
拦截器:通过统一拦截从浏览器发往服务器的请求来完成功能的增强 使用场景:解决请求的共性问题 如:乱码.权限验证 基本工作原理:拦截器和过滤器的工作原理相似 乱码问题:使用Spring过滤器(Filte ...
- SpringBoot------自定义拦截器
1.添加pom.xml使用的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt ...
随机推荐
- 远程桌面使用Pr剪视频
要远程访问高性能计算机并使用 Pr(Adobe Premiere Pro)进行视频编辑,您可以考虑使用流畅且响应迅速的远程桌面软件.您可以考虑以下选项. Splashtop Business Acce ...
- 若依报错:登录状态已过期,您可以继续留在该页面,或者重新登录;When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header.
报错界面 后台报错 java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot c ...
- PageOffice 6 保存数据区域数据同时保存文档
在实际应用中,例如在线签订合同的时候,合同的签订日期,合同号等等这些信息既要保存到数据库,合同签订后又要将整个合同文件保存起来.这时候就需要用到PageOffice的保存数据区域数据的同时保存整个文件 ...
- CICD详解之gitlab,Jenkins
持续集成概念 持续集成Continuous Integration 持续交付Continuous Delivery 持续部署Continuous Deployment 什么是持续集成: 持续集成是指开 ...
- Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化
本文分享自华为云社区<Kmesh进入CNCF 云原生全景图> ,作者:云容器大未来. 近日,Kmesh 正式进入 CNCF 云原生全景图,位于 Service Mesh 类别下. CNCF ...
- C# ScottPlot 绘图控件 源码阅读心得体会
ScottPlot的介绍可以看这篇博客:https://www.cnblogs.com/myshowtime/p/15606399.html 我对代码的理解是这样的: 图像的呈现是靠bitmap,每进 ...
- Leetcode数组-二分法
Leetcode数组-二分法 二分法学习地址 二分法 704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 targe ...
- 京东web端h5st—4.7逆向分析
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- 3个月搞定计算机二级C语言!高效刷题系列进行中
前言 大家好,我是梁国庆. 计算机二级应该是每一位大学生的必修课,相信很多同学的大学flag中都会有它的身影. 我在大学里也不止一次的想要考计算机二级office,但由于种种原因,备考了几次都不了了之 ...
- 三月二十五日 安卓打卡app开发
今天完成了每月打卡次数统计功能 public static String count(String account) throws SQLException { Connection connecti ...