Javaweb 过滤器与重定向的关系

【JavaWeb】复习重点内容 Servlet是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。 阅读详情

过滤器与重定向的关系

在Web开发中我们经常要写过滤器,现在我们用Javaweb中过滤器Filter(位于 javax.servlet包下)来讨论。

面临需求:

做一个请求资源的过滤器,要求登录后的用户并且session没有过期的情况下,任然可以通过直接登录后的页面。

思路:根据需求,我们可以简单的知道只需要在过滤器中,拿到session取登录的用户信息,如果存在,那就表示可以访问;如果没有那就报错,让重新登录。

根据思路,写出代码:

public class SysFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse reps = (HttpServletResponse) response;
        HttpSession session = req.getSession();

        // session 中有user的信息
        User user = (User) session.getAttribute(Constant.USER_INFO);
        if (user == null) {
            // reps.sendRedirect("/smbms/error.jsp");
        }
        // 执行链
        chain.doFilter(request, response);

        // 获取请求的文件
       System.out.println(req.getServletPath());
    }

    @Override
    public void destroy() {
    }
}

web.xml配置:

<!--    过滤session中有的登录-->
    <filter>
        <filter-name>Sysfilter</filter-name>
        <filter-class>com.zzx.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Sysfilter</filter-name>
        <url-pattern>/jsp/*</url-pattern>
    </filter-mapping>

测试效果:

第一步:进入主页,复制地址http://localhost:8080/smbms/jsp/frame.jsp ,然后退出(logout中会去除session的user)
在这里插入图片描述

第二步:退出后再次访问,http://localhost:8080/smbms/jsp/frame.jsp

在这里插入图片描述

结果确实是我们想要的,成功了。

思考成功的原因:

在这里插入图片描述

思考一个问题,在user为空的情况下,虽然设置了重定向,但是执行链里面的原来的请求会不会去执行?为了得到这个结果,我们加上

// 获取请求的文件
System.out.println(req.getServletPath());

然后,重新执行测试流程,控制台打印结果如下

/jsp/frame.jsp
/jsp/logout.do
/jsp/frame.jsp

看到这个结果我们知道了执行链会执行,但是疑惑的是,明明请求的是原来的文件地址,咋就变成了 /smbms/error.jsp 这个文件地址?

于是我们来猜测一下原因,在重定向之后原来的请求失效了,导致啥也没去请求。

为了验证这个猜测,我们改动一部分代码,

在这里插入图片描述

将重定向这一行注释掉。再次执行测试流程,退出后直接访问

在这里插入图片描述

结果:

在这里插入图片描述

发现进入主页了。

这就证明了我们的猜测,同一个请求进来后,如果发生重定向,那么原来的请求将失效 。

所以整个执行的流程就是,1、进入过滤器 ->发现session中user是空的 -> 2、重定向到错误页面(客户端发起了一个新的请求) -> 3、执行链doFilter(由于没有可用的请求目标,不做访问,直接下一步) -> 4、过滤器完成

对于控制台打印的请求文件,为什么没有error.jsp,原因是这样的,(1)重定向是客户端发起的新的一次请求,与本次请求无关,所以没有在这次过滤中打印。(2)重定向的请求error.jsp 的文件路径,没有配置在这个过滤器的过滤请求路径里面,所以不会打印。

// 获取请求的文件
System.out.println(req.getServletPath());

对于上面的解释,我们可以知道,既然重定向之后,原来的请求路径会失效,那就没必要让执行链 去执行 原来的请求路径;只有当原来的路径有效的时候,才去让执行链执行。

所以程序可以优化如下:

public class SysFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse reps = (HttpServletResponse) response;
        HttpSession session = req.getSession();

        User user = (User) session.getAttribute(Constant.USER_INFO);
        // session 中有user的信息
        if (user == null) {
            reps.sendRedirect("/smbms/error.jsp");
        } else {
            // 加上else 优化一下
            chain.doFilter(request, response);
        }

    }

    @Override
    public void destroy() {
    }
}
大厂面试突击——JavaWeb篇 大厂面试第二弹,收藏走起! 阅读详情

相关推荐

SAP 销售订单及发票 利润中心替代 Userexit出口 配置及程序

在跨公司销售业务中,跨公司销售订单的发票时无法从销售订单中将利润中心带到发票中,所以在跨公司的发票创建过程中需要配置出口来获取对应销售订单行项目的利润中心。 事务代码: 0KEM 配置步骤: 1、创建一个新的替代 2、创建一个步骤 3、维护一个先决条件,比如针对于特定工厂 PCASUB-VKBUR = '0001' 4、选择替代程序FORM,FORM必须为指定程序中存在的FORM名 5、编辑替代程序FORM 实现效果: 在程序FORM中打上断点 ...

李威威wiwi的博客 5069

java filter重定向_Java Filter(过滤器)——重定向

什么是过滤器简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletRes...

weixin_33147807的博客 3390

实战教程:如何用Python+小波变换+CNN搞定医学影像中的条纹噪声(附完整代码)

本文提供了一套完整的实战方案,指导如何利用Python结合小波变换与卷积神经网络(CNN)去除医学影像中的条纹噪声。该方法通过小波变换精准定位噪声,再使用轻量化CNN进行针对性清除,有效保护图像细节,并附有可运行的完整代码,为医学影像处理与AI分析提供高效工具。

weixin_29056101的博客 269

过滤器实现重定向

【代码】过滤器实现重定向。

m0_67868065的博客 196

mos管结电容等效模型_MOS管的防冲击防反接电路

MOS管的反接和抑制冲击一:原理分析MOS管由于生产工艺等因素,会产生相应的寄生电容,体二极管等。Mos管的寄生电容如图1所示,可以看到其具有三个寄生电容:G和S的电容Cgs;G和D的电容:Cgd,也称为反向传输电容、米勒电容、Crss;D和S的电容Cds。D和S之间的体二极管D1.图 1:MOS管等效模型寄生电容的数值可以从元器件的datasheet中得到,如图2,图3:Ciss(输入电容)=C...

weixin_29179583的博客 1859

KiCad 7.0 + 嘉立创打样:从原理图到实物,打造你的双LLCC68 LoRa串口透传板

本文详细介绍了使用KiCad 7.0设计双LLCC68 LoRa串口透传板的完整流程,从原理图设计到嘉立创打样。重点解析了AVR+LLCC68组合的优势、双模块布局的电磁兼容设计、SPI接口配置及射频走线技巧,并提供了实测数据和常见问题解决方案,帮助开发者高效实现物联网设备的低功耗远距离通信。

weixin_28693447的博客 260

重定向循环【过滤器Filter】

重定向循环【过滤器Filter】

伟庭的博客 1352

ROS 2 Slam Toolbox实战:从零跑通2D激光建图

SLAM(同步定位与地图构建)是移动机器人实现自主导航的基础技术,其核心在于通过传感器数据实时估计位姿并构建环境栅格地图。slam_toolbox作为ROS 2 Humble及后续LTS版本官方主推的2D SLAM后端,采用图优化+闭环检测架构,兼顾实时性、鲁棒性与工程可维护性。相比cartographer和hector_slam,它原生支持ROS 2、参数精简、诊断友好,特别适合硬件资源有限、缺乏IMU或深度相机的差速机器人平台。本文聚焦真实部署场景,覆盖RPLIDAR等常见2D激光雷达与TurtleBo

weixin_30596165的博客 358

【Web后端】Filter(过滤器)拦截无权限请求并重定向

在实际应用中,访问某些页面需要相应权限。 比如只有登录的用户才能访问个人中心,如果未登录的用户访问个人中心,就应该进行拦截并重定向到登录页面。 为了实现这个需求,可以使用过滤器(Filter)。 一、编写过滤器类 rootFilter类实现Filter接口(javax.servlet.Filter)。 在doFilter方法中写过滤逻辑,如果用户未登录,则拦截访问请求并重定向跳转到登录页面。 通过session判断用户是否登录,具体实现方法是用户登录成功后,把用户类的实例化对象user存储到

Get your hands dirty 3659

matlab中高频变压器怎么找,干货|手把手教你绕制高频变压器

原标题:干货|手把手教你绕制高频变压器绕制一个变压器所需材料:磁芯、骨架、各种铜线、麦拉胶带。变压器参数:磁芯:EE22原边:134T(1-3脚),辅助:32T(5-4脚),输出:15T(10-9脚)原边电感:1380±10%uH漏感:≤44uH引脚分布图: 特别注意:绕制方法为网上下载,其中变压器绕制方法是对的,但其中存在着很多问题(比如,正规变压器的绕组的头和尾是要添加铁氟龙套管的,每一层之间...

weixin_30895121的博客 2125

STM32F103 -- LIN从机通讯 -- 程序代码 -- 详细讲解版(2万字长文)

主要代码分为3个文件,usart文件是对GPIO端口和串口Lin模式的初始化,lin_buffer文件是对串口环形缓冲区的编写,lin_driver文件是Lin从机模式驱动代码。通过这三个文件的代码便可实现STM32F103的LIN从机通讯。

晴朗luo的博客 1万+

过滤器filter,转发,重定向执行问题

如上图所示,写的过滤器,是登陆后转发三个servlet的。 运行之后一次filter都没有进,把我郁闷了一晚上,问了个老铁,才解开疑惑: filter是过滤request请求的,这里的servllet都是在服务器内转发的,没有经过webFilter设置的路径的当然就没有进filter勒,如果设置成重定向,才会在,请求url有设置的路径的链接进入filter。唉,有的人工资高是有原因的。 ...

GFJadfkljasfg的博客 3029

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od

KJ.JK 284

java当中的Filer过滤器

使用注解进行配置,需要使用@WebFiler常用的配置项filterName该filter的名字initParams初始化参数filter显示名称指定对哪些servlet进行过滤是否支持异步模式指定拦截路径value指定拦截路径。

weixin_61908420的博客 1606

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

javaweb,数据库常见知识点

where和having的区别--执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,having是分组之后进行对结果的过滤。4.注释(1)单行注释:--注释内容或#注释内容(特有)(2)多行注释:/*注释内容*/SQL分类:DDL-数据定义语言,用来定义数据库对象(数据库,表,字段)。DDL--表操作-创建 create table 表名(字段1 字段1类型[]comment 字段1注释,字段2 字段2 类型[comment 字段2注释],....)[comment 表注释];

2301_80312639的博客 440

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java面试常见问题整理(JavaWeb阶段 附答案)

15、分别说出http,https,ftp,talnet的默认端口1、HTTP:使用80端口。HTTP属于超文本传输协议,所有的WWW文件都必须遵守这个标准,HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务器端是网站,通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。2、FTP:使用20/21端口。

lonzgzhouzhou的博客 1827

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaWeb

ServletContextAttributeListener - 监听ServletContext的保存作用域的改动(add,remove,replace)ServletRequestAttributeListener - 监听ServletRequest的保存作用域的改动(add,remove,replace)HttpSessionAttributeListener - 监听HttpSession的保存作用域的改动(add,remove,replace)Tomcat 启动时,监听器的 实例化。

animatelife的博客 155

面试二、Java Web 与 Web Service

二、Java Web 与 Web Service 1、阐述 Servlet和 CGI的区别? 答:Servlet 与CGI的区别在于Servlet 处于服务器进程中,它通过多线程方式运行其service()方 法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的 进程,服务完成后就销毁,所以效率上低于Servlet。 补充:Sun Microsys...

qq_42676998的博客 389

森林病虫防治系统 (结束)

明天开始答辩。 今天老师给我们整理了一些知识点。 第一章 java Web 工作原理 重点: 什么是HTTP?(了解) HTTP是一种超文本传送协议,是一套计算机在网络通信的一种规则。 特记:HTML超文本标记语言,以.htm或.html为扩展名, HTTP请求/响应包含哪些内容?(了解) HTTP请求包含了:请求行,请求头,空行与消息体。 HTTP响应包含了:状态行,响应头,空...

weixin_33888907的博客 83

JSP相关

JSP相关 一、JSP的内置对象 输入、输出对象:request,response,out; 作用域通信对象:session,application,pageContext; Servlet对象: page,config; 错误对象: exception; 四个作用域(信息共享的范围)从大到小:appliaction>session>request>page application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。 session:会话作用

z1427094386的博客 221

Java程序员面试题集(116-135)

Java程序员面试题集(116-135) 摘要:这一部分讲解基于Java的Web开发相关面试题,即便在Java走向没落的当下,基于Java的Web开发因为拥有非常成熟的解决方案,仍然被广泛应用。不管你的Web开发中是否使用框架,JSP和Servlet都是一个必备的基础,在面试的时候被问到的概率还是很高的。 116、说出Servlet的生命周期,并说出Servlet和CGI的

liucg0327的专栏 522

Java Web

1. Java Web 用 Java 去开发基于 Web 的应用程序,Java EE基于Java开发企业解决方案 Java Web 是 Java EE 的主要分支 用Java 开发 Web 应用 需要一个 Web 应用服务器,专门对外提供服务的,将写好的 Java 程序部署到这个 Web 应用服务器上,从而完成与客户端的交互。 Web 应用服务器,它是一个产品,是一个可以安装到服务器计算机上的一个服务产品,我们可以在 Web 应用服务器上部署一些供客户端访问的资源,然后启动该服务,那么客户端就可以通过浏览器

王村头的博客 1957

Java We基础知识

javaweb基础知识

m0_52058662的博客 289

JavaWeb中的监听器和过滤器,页面跳转的两种方式(转发与重定向)

监听器 在JavaWeb中,监听器是一种组件,能够监听项目的启动和停止,用户会话的创建和销毁,以及各种组件的添加、更新和删除。当Java对象发生上面的事件时, 将会通知监听器, 监听器将会调用特定的方法来处理该事件。 监听器应用场景:启动网站后进行初始化、检测用户的数量、清除过期session等。 SSM框架中监听器的配置 在web.xml中加入如下配置: <listener> ...

amber_gloam的博客 4881

JavaWeb——Servlet转发与重定向的区别,过滤器与监听器

转发与重定向 https://blog.youkuaiyun.com/meiyalei/article/details/2129120 Servlet中转发: // 转发NewServelt request.getRequestDispatcher("NewServelt").forword(request,response); Servelt重定向: // 重定向到NewServlet res...

晃在云淡风轻 567

过滤器 重定向 java

过滤器重定向在Java中的实现指南 作为一名经验丰富的开发者,我经常遇到新手开发者在实现特定功能时感到困惑。今天,我们将一起学习如何在Java中实现过滤器重定向。过滤器是一种在请求到达目标资源之前或响应发送给客户端之前,对请求或响应进行处理的机制。重定向则是将客户端请求从一个URL转发到另一个URL的过程。 过滤器的基本概...

weixin_30383561的博客 224
上一篇: Git 安装和使用教程
七月之雨
博客等级 码龄9年 7粉丝 9原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值