javax.servlet.Filter 中 *** 作 javax.servlet.http.HttpServletRequest

javax.servlet.Filter 中 *** 作 javax.servlet.http.HttpServletRequest,第1张

我当初在利用Struts2实现电子商务购物系统的时候,也遇到这个问题,想记录用户之前访问的URL,包括点击的所有参数信息,后面给我解决了。我是利用拦截器去做的,然后把用户的URL存到Session当中。这是我的源码,你可以按照这个思路去做,应该没有问题的,我的项目已经验收通过了。希望能够帮到你,谢谢

/

方便用户返回上一个浏览界面

/

import javaxservlet>

Filter是request/response执行过滤任务的对象,资源可以是一个servlet或者静态资源。Filter在 doFilter 方法中执行过滤逻辑。每个Filter都有一个FilterConfig对象,可以从FilterConfig对象获取初始化参数和ServletContext引用。

Filter工作在客户端和Servlet之间,可以对客户端request以及服务器的response进行处理,基于此Filter可以用于实现以下功能:

定义一个Filter需要 javaxservletFilter 接口, Filter 有如下三个方法:

下面定义一个简单的Filter,在 init() 方法中初始化Filter的名字,在 doFilter 方法中简单的记录Filter被调用, destroy() 简单的记录方法被调用。

FirstFilter:

在完成Filter的创建后,还需要将Filter注册到Web容器(添加到Filter chain)才能对request/response进行过滤。在Spring Boot中注册Filter非常简单,下面是一个简单注册Filter的样例:

启动Spring Boot并调用一个测试接口,测试接口可从 这里 获取。

应用的输出如下:

从输出中可以看出Filter完成了初始化,Filter的名字是“first filter”。

如果定义了多个Filter,并期望request/response可以按照设定的顺序依次经过各个Filter(例如:request需要先经过鉴权Filter,鉴权通过后再进入参数校验Filter等),这种情况如何保证Filter的执行顺序呢?在注册Filter的时候可以给每个Filter设置一个数字表示的order,值越小Filter在chain中的位置越靠前。为了严重Filter的执行顺序,我们定义第二个Filter:SecondFilter,源码可从 这里 获取。然后将两个Filter添加到Web容器中:

启动Spring Boot并调用一个测试接口,测试接口可从 这里 获取。

应用的输出如下:

request依次经过first filter -> second filter,response依次经过second filter - > first filter,Filter的执行顺序满足我们的期望。

通过上面学习的知识,我们实现一个鉴权的Filter。假设客户端访问资源时需要在请求的header中携带两个参数:user和password(生成环境携带账号密码是十分危险的,应该考虑基于Token的鉴权),如果有一个参数没有携带则返回客户端错误的请求(400 Bad Request),如果user和password不匹配或系统不存在用户则返回无权访问 (403 Forbidden)。客户端每成功一次,系统都会记录用户的访问次数。

Filter的实现如下:

过滤步骤:

完整的源码可以从 这里 获取。

以上就是关于javax.servlet.Filter 中 *** 作 javax.servlet.http.HttpServletRequest全部的内容,包括:javax.servlet.Filter 中 *** 作 javax.servlet.http.HttpServletRequest、filter的使用 java 过滤器的几种使用方法、java日志的filter等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9559161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存