Filter过滤器

适用场景

1.为web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)
2.用户授权Filter:负责检查用户请求,根据请求过滤用户非法请求
3.日志Filter:详细记录用户的特殊请求
4.负责解码Filter:包括对非标准解码的请求解码
5.XSLT Filter:能改变XML内容

用途

1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest,根据需要检查HttpServletRequest,可以修改HttpServletRequest头和数据
2.在HttpServletResponse到达客户端之前,拦截HttpServletResponse,根据需要检查HttpServletResponse,可以修改HttpServletResponse头和数据

Servlet Filter在controller之前检查并修改请求和响应的内容
一个Filter可负责拦截多个请求或者响应,一个请求或响应也可被多个请求拦截

Filter创建步骤

1.创建Filter类,实现javax.servlet.Filter接口的三个方法:
  void init(FilterConfig config); // 用于完成Filter的初始化
  void destroy(); //用于Filter销毁前,完成一些资源的回收
  // 实现过滤功能,对每个请求以及响应增加的额外处理
  void doFilter(ServletRequest request, ServletResponse response, FilterChain chain);
2.在web.xml文件中配置Filter,或者直接使用注解

采用注解的程序例子:

 /**
* Description: 设置request的编码集,并验证用户是否登录
*/
// 注解
@WebFilter(filterName = "loginFilter",
urlPatterns = {"/*"}, // 该Filter拦截该项目下的所有用户请求
initParams = { // 配置Filter初始化参数
@WebInitParam(name="encoding", value="utf8"),
@WebInitParam(name="loginPage", value="/login.jsp")})
public class LoginFilter implements Filter { // 用于访问Filter的配置信息
private FilterConfig config; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
} @Override
public void destroy() {
this.config = null;
} @Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
// 获取Filter的配置参数
String encoding = config.getInitParameter("encoding");
String loginPage = config.getInitParameter("loginPage"); // 设置request编码用的字符集
servletRequest.setCharacterEncoding(encoding);
// 将ServletRequest请求转换成HttpServletRequest请求
HttpServletResquest request = (HttpServletRequest) servletRequest;
// 获取客户请求的页面
String requestPath = request.getServletPath();
// 判断用户是否登录
HttpSession session = request.getSession();
// 若没有,且访问页面不是登录页面
if (session.getAttribute("user") == null && !requestPath.endsWith(loginPage)){
// 转发到登录页面
request.getRequestDispatcher("/jsp/login.jsp").forward(servletRequest, servletResponse);
}
else{
// 放行
chain.doFilter(servletRequest, servletResponse);
}
} }

如果不用注解的方式,需要在web.xml中配置自定义的拦截器:

 <filter>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<init-param>
<param-name>encoding</param-name><param-value>utf8</param-value>
<param-name>loginPage</param-name><param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

如果有多个拦截器,拦截会按照从上至下的顺序进行拦截,一般来说处理编码的拦截器配置在最上面。

有了上述步骤的操作,就可以通过URI进行访问。
此时如果能够取得Session中的logined值时,会直接进入下一步处理,否则直接进入登录页面。从而完成session的校验。

参考源:https://blog.csdn.net/wtopps/article/details/72870356
    https://blog.csdn.net/qq_23835497/article/details/79626197

Session会话

定义

Session代表服务器与浏览器的一次会话过程,过程可以是连续的,也可以是时断时续的。

作用

Session是为了保持用户访问服务器的交互状态。
Session机制是一种服务器的机制。当程序需要为客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已经包含一个session id。
如果已经包含session id,说明以前已经为此客户创建过session,服务器就按照session id把session检索出来使用。如果客户请求里不含session id,则为此客户创建一个session,并且生成一个与此session相关联的session id,此session id将在本次响应中返回给客户端保存。

创建时机

session在有客户端访问时并没有被创建,直到server端程序(如Servlet)调用HttpServletRequest.getSession()/HttpServletRequest.getSession(true)此类语句时才会被创建。

删除时机

session在以下情况被删除:
1.程序调用HttpSession.invalidate()
2.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
3.服务器进程被停止

参考源:https://blog.csdn.net/canot/article/details/50667793
    https://blog.csdn.net/pengpenglin/article/details/706095

Filter过滤器与Session会话跟踪技术的更多相关文章

  1. Cookie&Session会话跟踪技术

    今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...

  2. Django - session 会话跟踪技术

    1.session简介 |session 英 /'seʃ(ə)n/ 美 /'sɛʃən/ 基于cookies开发,将值存到服务端 写session 读session Session是服务器端技术,利用 ...

  3. cookie和session的区别与会话跟踪技术

    会话跟踪技术: HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟 ...

  4. JavaEE基础(04):会话跟踪技术,Session和Cookie详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...

  5. JSP基础--会话跟踪技术、cookie、session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  6. 简述会话跟踪技术——Cookie和Session

    简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...

  7. 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例

    目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...

  8. django会话跟踪技术

    目录 django中的会话跟踪技术 什么是会话跟踪技术 HTTP无状态协议 Cookie概述 什么是cookie cookie源码 cookie超长时间 cookie超长时间 cookie生效路径 删 ...

  9. 04-cookies 会话跟踪技术

    1.会话跟踪技术 1.Http协议的无状态保存 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2 .会话路径技术使用Cookie或session完成 我们知道HTTP协 ...

随机推荐

  1. 【转】Hudson插件Email-Ext邮件模板时间格式化的解决方法

    原文地址:http://www.cnblogs.com/haycco/archive/2012/03/20/3031397.html 最近因对Hudson版本进行了升级为2.2.0,所以各方面都在搞项 ...

  2. Oracle创建测试表

    试中文排序的数据库版本: SQL> select * from v$version; BANNER ----------------------------------------------- ...

  3. opengl学习笔记(三):经过纹理贴图的棋盘

    opengl纹理贴图的步骤: 1:创建纹理对象,并为它指定一个纹理 2:确定纹理如何应用到每个像素上 3:启用纹理贴图功能 4:绘制场景,提供纹理坐标和几何图形坐标 注意:纹理坐标必须在RGBA模式下 ...

  4. ubuntu16.04下安装Eigen

    请输入以下命令进行安装: sudo apt-get install libeigen3-dev 一个库由头文件和库文件组成.Eigen头文件的默认位置在 “usr/include/eigen3” 中. ...

  5. win10 64bit安装redis及redis desktop manager的方法

    下载地址: MSOpenTech/redis——Github 下载后随便解压到一个地方 在 命令行 启动服务端 命令内容如下: redis-server.exe redis.windows.conf ...

  6. MySQL在linux上的source code安装方法(configure)

    1.建立操作系统用户和组 [root@faspdev ~]# groupadd mysql [root@faspdev ~]# useradd -g mysql mysql 2.解压安装文件,进入解压 ...

  7. Oracle体系结构之数据文件管理

    数据文件分2个方向管理: 物理结构和逻辑结构. 数据库的存储层次结构图: ............. 逻辑结构:                                  物理结构: .... ...

  8. ionic 相关问题解决办法记录

    1.npm无法安装模块 报code E400错误 解决办法: 删除npmrc文件. 注意:不是nodejs安装目录npm模块下的那个npmrc文件,而是在C:\Users\{账户}\下的.npmrc文 ...

  9. LoadRunner-关联报错(解决方法一)

    Action.c(153): Error -35061: No match found for the requested parameter "CorrelationParameter_3 ...

  10. 第一课 JDK环境变量配置

    第一步:下载,并解压到D:/JDK 第二步:环境变量配置 右键我的电脑->属性->高级->环境变量->系统变量(注意:是下面的系统变量,不是上面的用户变量) 新建变量名 JAV ...