17站长网 网站首页 网站运营 服务器 查看内容

Tomcat常用的过滤器详解

2022-12-4 12:24| 查看: 1852 |来源: 互联网

大家好,现在小编来为大家解答以上问题。Tomcat常用的过滤器详解相信很多人还不知道,现在让我们一起来看看吧!一、跨域过滤器CorsFilter org.apcache.catalina.filters.CorsFilter是跨域资源共享规范的一个实现,

大家好,现在小编来为大家解答以上问题。Tomcat常用的过滤器详解相信很多人还不知道,现在让我们一起来看看吧!

一、跨域过滤器CorsFilter

org.apcache.catalina.filters.CorsFilter是跨域资源共享规范的一个实现,常常用于前后端分离,静态资源与后端分离等情况。它主要在HttpServletResponse中增加Access-Control-*头,同时保护HTTP响应避免拆分,如果请求无效或者禁止访问,则返回403响应码。

1.1、配置示例

CorsFilter org.apache.catalina.filters.CorsFilter cors.allowed.origins * cors.allowed.methods GET,POST,HEAD,OPTIONS,PUT cors.allowed.headers Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers cors.exposed.headers Access-Control-Allow-Origin,Access-Control-Allow-Credentials cors.support.credentials true cors.preflight.maxage 10 CorsFilter /*

1.2、参数说明

1、cors.allowed.origins

允许访问的跨域资源列表,"*"表示允许访问来自任何域的资源,多个域用逗号分隔,默认为"*"

2、cors.allowed.methods

可以用于访问资源的HTTP方法列表,","分隔,用于跨域请求。这些方法将出现在Prefligh(预检请求)响应头Access-Control-Allow-Methods的一部分,t默认为"GET, POST, HEAD, OPTIONS"

3、cors.allowed.headers

构造请求时可以使用的请求头,以","分隔,这些方法将出现在Prefligh(预检请求)响应头Access-Control-Allow-Headers的一部分,默认为Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers

4、cors.exposed.headers

浏览器允许访问的头部信息列表,","分隔。这些方法将出现在Prefligh(预检请求)响应头Access-Control-Allow-Headers的一部分,默认为空。

5、cors.preflight.maxage

浏览器允许缓存的Preflght请求结果的时间,单位为秒。如果为负数,则表示CorsFilter不会添加头到Preflight响应,这些方法将出现在Prefligh(预检请求)响应头Access-Control-Max-Age的一部分,默认为1800.

6、cors.support.credentials

表示资源是否支持用户证书,这些方法将出现在Prefligh(预检请求)响应头Access-Control-Allow-Credentials的一部分,默认为true

7、cors.request.decorate

Cors规范属性是否已经添加到HttpServletRequest,默认为true。CorsFiter会为HttpServletRequest添加请求相关信息,cors.request.decorate配置为true,那么以下属性将会被添加

1)cors.isCorsRequest:用于请求是否为Cors请求。

2)cors.request.origin:源URL,请求源自的页面URL。

3)cors.request.type:Cors的请求类型,如下:

SIMPLE:非Preflight请求为先导的请求。

ACTUAL:以Preflight请求为先导的请求。

PRE_FLIGHT:Preflight请求

NOT_CORS:正常同域请求

INVALID_CORS:无效的域请求

4)cors.request.headers:作为Preflight请求Access-Control-Request-Header头发送的请求头信息。

二、CSRF保护过滤器CsrfPreventionFilter

org.apcache.catalina.filters.CsrfPreventionFilter为Web应用提供了基本的CSRF保护。返回的客户端的所有链接均通过HttpServletResponse.encodeRedirectURL(String)与HttpServletResponse.encodeURL(String)进行编码,该过滤器生成一个随机数并存储到会话session中进行对比,URL使用该随机数进行编码。当接收到下一个请求时,请求中随机数与会话中的进行对比,只有两者相同时,请求才会被允许。

2.1、配置示例

CsrfPreventionFilter org.apache.catalina.filters.CsrfPreventionFilter denyStatus 403 entryPoints /html,/html/list nonceCacheSize 5 CsrfPreventionFilter /*

2.2、参数说明

1、denyStatus:HTTP响应吗,用于驳回拒绝请求,默认为403  

2、entryPoints:以","为分隔的URL列表,这些列表将不会进行随机数检测(主要用于通过导航离开受保护应用,之后再返回) 

if ("GET".equals(req.getMethod()) && this.entryPoints.contains(this.getRequestedPath(req))) { skipNonceCheck = true; }

3、nonceCacheSize:随机数缓存大小。先前发布的随机数被缓存到一个LRU缓存中以支持并发请求,有限的用于浏览器刷新等行为(可能导致随机数不是当前的),默认为5

private int nonceCacheSize = 5; .... if (nonceCache == null) {   nonceCache = new CsrfPreventionFilter.LruCache(this.nonceCacheSize); if (session == null) { session = req.getSession(true);   } session.setAttribute("org.apache.catalina.filters.CSRF_NONCE", nonceCache); }

4、randomClass:用于生成随机数的类,必须是java.util.Random实例,如不设置默认为java.security.SecureRandom

三、防止参数丢失过滤器FailedRequestFilter

org.apcache.catalina.filters.FailedRequestFilter用于触发请求的参数解析,当参数解析失败时,将会拒绝请求,该Filter用于确保客户端提交的参数信息不发生丢失。该过滤器的原理是:先调用ServletRequest.getParameter(首次调用会触发Tomcat服务器的请求参数解析,如果参数解析失败,将结果放到请求属性org.apache.catalina.parameter_parse_failed中),之后判断属性org.apache.catalina.parameter_parse_failed的值,如果不为空则直接返回400。

为了能正确解析参数,需要该Filter之前设置字符集编码过滤器SetCharacterEncodingFilter。此外,该过滤器是不支持r初始化参数的

// 判断是否为有效的请求:org.apache.catalina.parameter_parse_failed为null private boolean isGoodRequest(ServletRequest request) { request.getParameter("none"); return request.getAttribute("org.apache.catalina.parameter_parse_failed") == null; }

四、获取客户端IP过滤器RemoteAddrFilter

org.apcache.catalina.filters.RemoteAddrFiler允许比较提交的客户端IP地址(通过ServletRequest.getRemoteAddr获取)是否符合指定正则表达式。

4.1、配置示例

Remote Address Filter org.apache.catalina.filters.RemoteAddrFilter allow 127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1 Remote Address Filter /*

4.2、参数说明  

1、allow:指定允许访问的客户端IP地址  

2、deny:拒绝访问的客户端地址  

3、denyStatus:拒绝请求时返回的HTTP响应吗。

五、获取客户端Host过滤器RemoteHostFilter

org.apcache.catalina.filters.RemoteHostFiler允许比较提交请求的客户端主机名是否符合指定的正则表达式,以确定是否允许继续处理请求。参数同RemoteAddrFilter

六、获取原始客户端IP过滤器RemoteIpFilter

 当客户端通过HTTP代理或者负载均衡访问服务器时,对于服务器来说,请求直接源自前置的代理服务器,此时获取到的远程IP实际为代理服务器的IP地址。

6.1、如何获得原始的客户端的IP地址

HTTP协议通过X-Forwarded-For头信息记录了资客户端到应用服务器前置代理的IP地址,RemoteIpFilter通过解析该请求头,将请求中的IP地址与主机名替换为客户端真实的IP地址和主机信息,此外还可以通过X-Forwardred-Proto请求头替换当前的协议名称http/https、服务器端口及request.secure。

X-Forwarded-For的格式如下:

X-Forwarded-For: client, proxy1, proxy2

最左侧client为最原始的客户端IP,如上示例中客户端经过了proxy1、proxy2、proxy3三级代理(最后一层proxy3不显示,通过ServletRquest.getRemoteAddr获取)。在负载均衡的情况下,RemoteAddrFilter和RemoteHostFilter需要与该过滤器配合使用,否则无法正确限制访问客户端。

通常我们获取X-Forwarded-For使用如下Java代码:

public static String getIp(HttpServletRequest request) { String requestAddr = request.getHeader("x-forwarded-for"); if (requestAddr == null || requestAddr.length() == 0 || "unknown".equalsIgnoreCase(requestAddr)) { requestAddr = request.getHeader("Proxy-Client-IP"); } if (requestAddr == null || requestAddr.length() == 0 || "unknown".equalsIgnoreCase(requestAddr)) { requestAddr = request.getHeader("WL-Proxy-Client-IP"); } if (requestAddr == null || requestAddr.length() == 0 || "unknown".equalsIgnoreCase(requestAddr)) { requestAddr = request.getRemoteAddr(); } return requestAddr; }

6.2、配置示例

1)基本处理X-Forwarded-For头的配置

RemoteIpFilter org.apache.catalina.filters.RemoteIpFilter RemoteIpFilter /* REQUEST

2)处理X-Forwarded-For与x-forwarded-proto头部的配置

RemoteIpFilter org.apache.catalina.filters.RemoteIpFilter protocolHeader x-forwarded-proto RemoteIpFilter /* REQUEST

3)使用内部代理的高级配置

RemoteIpFilter org.apache.catalina.filters.RemoteIpFilter allowedInternalProxies 192\.168\.0\.10|192\.168\.0\.11 remoteIpHeader x-forwarded-for remoteIpProxiesHeader x-forwarded-by protocolHeader x-forwarded-proto

4)使用可信任代理高级配置

RemoteIpFilter org.apache.catalina.filters.RemoteIpFilter allowedInternalProxies 192\.168\.0\.10|192\.168\.0\.11 remoteIpHeader x-forwarded-for remoteIpProxiesHeader x-forwarded-by trustedProxies proxy1|proxy2

七、字符集编码过滤器SetCharacterEncodingFilter

提供了一种设置字符集编码的方式,通常情况下默认ISO-8859-1编码,但实际生产环境推荐使用UTF-8编码,而请求中的编码可以在未指定编码时使用,也可以强制覆盖。

7.1、配置示例

SetCharacterEncodingFilter org.apache.catalina.filters.SetCharacterEncodingFilter encoding UTF-8 ignore false SetCharacterEncodingFilter /*

7.2、参数说明  

1、encoding:指定的字符集编码    

2、ignore:表示是否忽略客户端请求设置的字符集编码,如果为true那么都会将请求字符集编码覆盖,如果为false,请求没有指定字符集编码时设置。默认为false

以上Tomcat常用的过滤器详解就是小编为大家收集整理的全部内容了,希望对大家有所帮助。如果您喜欢这篇文章,可以收藏或分享给您的小伙伴们吧!欢迎持续关注我们的后续更新。

本文最后更新于 2022-12-4 12:24,某些文章具有时效性,若有错误或已失效,请在网站留言或联系站长:17tui@17tui.com
·END·
站长网微信号:w17tui,关注站长、创业、关注互联网人 - 互联网创业者营销服务中心

免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!

17站长网微信二维码

始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!

扫一扫,关注站长网微信

大家都在看

  • 1、首先尝试重启手机,重启可以解决手机的90%问题。 1、可以先尝试更换一下网络,网络波动过大就会导致错误。 2、同时在线投票的用户过多而导致了错误,可以过 ......

    安卓手机 2023-06-01
  • 1、emui11是一款UI设计。 2、鸿蒙系统是一款操作系统。 3、鸿蒙系统基于linux系统开发。 4、鸿蒙系统可以说是一个根本,而emui11只是修饰根本的点缀。 5、鸿蒙系 ......

    鸿蒙系统 2023-06-01
  • 1、首先右击“此电脑”点击“属性”。 2、再点击右边的“设备管理器”。 3、然后点击“显示适配器”展开。 4、接着右击NVIDIA显卡,点击“更新驱动程序”。 ......

    硬件知识 2023-06-01
  • 答:如果没有刚需不建议升级win11, 因为现在win11相比win10并没有多少提升,如果升级了反而改了ui影响使用体验和效率。 如果我们喜欢win11的新界面和设置,可 ......

    windows11 2023-06-01
  • alt是网页html中img标签中的一个属性,也是众多属性中的一个,有其独特的意义及作用。在很多文章中都专门提到过alt,但是我发现还是有很多站长并没有正确的使用a ......

    SEO优化 2023-06-01
  • 1、首先打开edge浏览器,点击右上角的三个点。 2、然后点击下方的“设置”。 3、点击之后我们选择“默认浏览器”。 4、接着将ie模式设置成“允许”。 5、设 ......

    windows11 2023-06-01
  • 方法一: 1、有些用户是使用U盘时出现的问题,先按下快捷键“win+r”打开运行窗口,输入cmd回车。 2、然后输入代码:chkdsk X: /f”,“X”指的是你U盘具体的 ......

    系统问题 2023-06-01
  • 答:能直接更新。 方法一: 1、如果我们的系统硬件配置能够满足win11的更新需求。 2、那么可以点击“windows键”打开开始菜单,然后打开其中的“设置” 3、在 ......

    windows11 2023-06-01
  • 1、鸿蒙系统是基于微内核的全场景分布式os。 2、可以根据需求进行扩展实现系统跟广泛的安全性。 3、此架构主要用于物联网,有着延时低的特点给你最好的购物体验 ......

    鸿蒙系统 2023-06-01
  • 方法一: 1、点击左下角开始,在“windows系统”中打开“控制面板”。 2、进入后点击查看方式选择“大图标”。 3、然后在下面找到“管理工具”。 4、在管理 ......

    系统问题 2023-06-01
  • 1、性能方面是鸿蒙性能更好,鸿蒙系统拥有更流畅的动画、更低的耗电量、更低的应用内存占比和更长时间的硬件寿命。 2、在智能互联方面,鸿蒙远远领先于安卓系统 ......

    鸿蒙系统 2023-06-01
  • 1、斗鱼粉丝牌是需要亲密度升级的。 2、赠礼物或者观看直播可以获得亲密度。 3、一般情况下,1点亲密度价值相当于1块钱。 4、不过赠送非鱼翅礼物和观看直播的亲 ......

    软件教程 2023-06-01
  • 1、首先我们点击网络进入“网络和internet设置”。 2、然后进入“以太网”。 3、最后选择“编辑”就可以进行设置了。...

    windows11 2023-06-01
  • 答:有降噪的。 真我budsair3neo的降噪功能还是相当不错的。 真我budsair3neo详情 外观: 1、充电盒的造型师因为太空舱的外形,非常有科技感。 2、盖子的上半 ......

    硬件知识 2023-06-01
  • 1、首先我们右键“开始”。 2、然后点击“终端(管理员)”。 3、接着在终端界面输入“net user administrator /active:yes”按下回车。 4、最后重启就可以完 ......

    windows11 2023-06-01
  • 方法一: 解决思路:增大虚拟内存 1、开机后,鼠标右键点击“计算机”,看到“属性”按钮,点击属性。 2、在计算机属性中,左上面找到“系统保护”,鼠标左键 ......

    windows7 2023-06-01
  • 1、首先我们“win+r”进入运行。 2、在运行界面输入“regedit”。 3、接着进入“HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer”。 ......

    windows11 2023-06-01
  • 1、首先我们按住键盘的“win+i”进入设置。 2、然后点击“时间和语言”。 3、接着选择右边的“输入”。 4、然后选择“高级键盘设置”。 5、最后就可以找到输 ......

    windows11 2023-06-01
  • 1.低配电脑装win10可能会出现轻微的卡顿 2.也可能在运行大型软件或者游戏的时候不流畅 3.我们也可以通过优化系统来缓解这些问题: 一、降低win10的视觉效果 1. ......

    windows10 2023-06-01
  • 答:在3DMark压力测试当中,显卡需要超高97%才能够算合格,证明显卡的稳定性是过关的。 1、一般的默认情况下在2500~3000分就算很正常的了。 2、分数越高说明显卡 ......

    软件教程 2023-06-01
  • 如今,利用网站排名做推广的企业越来越多,出现这种情况的原因,就在于网站排名推广可以扩大企业的宣传范围,提升企业的曝光度,从而也就能够让更多用户通过互联 ......

    SEO优化 2023-06-01
  • 故障原因分析:有可能是不小心双击了任务管理器的边框所导致的; 解决方法: 1、首先是因为双击导致显示不全的话,就先双击任务管理四周灰色的区域即可解决了。 ......

    windows7 2023-06-01
  • 1.按“Windows+X”打开命令提示符管理员,输入“net stop wuauserv”。 1.打开C:Windows,重命名SoftwareDistribution文件夹为SDold。 3.按“Windows+X”打开 ......

    windows10 2023-06-01
  • 一个好的网站,拥有一个好的404页面是标配。为何要有404页面?今天小编就给大家分享分享404页面的4个作用。 1、引导用户不要关闭网站,提高用户体验度 404页面 ......

    SEO优化 2023-06-01
  • 从表面上看,普通网站用户无法判断链接是Nofollow还是Dofollow。您可以复制或单击Nofollow链接,就像他们在网络上复制或单击任何其他链接一样。然而,在幕后,有 ......

    SEO优化 2023-06-01
  • coloros11作为coloros7的更新版本,在各个方面都要更加优秀。 1、coloros11的系统资源利用率提高了45%,系统的速度提高32%,帧率稳定性提高了17%。 2、coloros1 ......

    安卓手机 2023-06-01
  • 1、首先按下快捷键“win+r”打开运行,输入代码:msconfig。 2、然后点击系统配置中的“引导”。 3、下滑看到安全引导,将其勾选。 4、勾选完成之后点击确定 ......

    windows10 2023-06-01
  • 方法一 在电脑的键盘上快捷键“Ctrl+Alt+delete”注意要同时按下去 方法二 键盘快捷键“Ctrl+shift+esc”注意这个也要同时 方法三 1、在键盘上快捷键“win+r” ......

    windows10 2023-06-01
  • 1、首先登陆账号,选择出发地和目的地,然后选择日期点击查询车票。 2、如果出现无票情况,但还有候补购票名额,就会有蓝色的候补按钮, 如果是灰色候补按钮, ......

    软件教程 2023-06-01
  • 一、优点: 1、流畅度极强,没有任何的延迟或者卡顿,给你畅享般的丝滑体验。 2、鸿蒙系统会比安卓系统更加的快,起码提升60%左右。 3、鸿蒙系统进行了大统一, ......

    鸿蒙系统 2023-06-01
返回顶部