17站长网

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

Tomcat常用的过滤器详解

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

大家好,现在小编来为大家解答以上问题。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站长网微信二维码

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

扫一扫,关注站长网微信

大家都在看

  • 当我们在共享网络访问的时候,可能会遇到提示指定的网络名不再可用的问题,这可能是由于我们的共享网络出现了错误,也可能是被共享的对象所拒绝了。指定的网络名 ......

    故障排除 2023-03-10
  •   文/曹杨  原标题:谁还看电视?  爸爸戴一副老花镜,妈妈戴一副近视镜,一人坐在沙发,一人躺在床上,各自刷着自己关注的博主更新的短视频。电视也许开着,但只是背景。  这样的画面,几乎成了洛奇家的常 ...

    站长 2020-12-09
  • 图片来源于简书  文/郭开森 杨帆  陆玖财经准备开新栏目了,每周一创始人郭开森和杨帆合体郭德帆,对行业进行一些观察和评论,第一篇我们仍是打算写社区团购,这是当下最火的话题。  来过陆玖财经做客的朋友们...

    热议 2020-12-07
  • 一、软件冲突1、首先确认是否是应用程序冲突导致的。2、查看是否只有特定几个游戏或应用会导致该问题。3、如果是应用冲突,那么只要卸载这些app就可以解决了。二 ......

    软件教程 2022-12-27
  • 8月15日消息 上周,有媒体报道前身为百度图片的“榴莲”APP含有大量不雅视频内容被用户举报。对此,百度图片官方进行了回应,百度图片表示已经对报道中所涉及的“生吃旋风哥”等争议内容进行了下线处理。 此外,百度...

    站长 2016-08-15
  • 1、首先进入到“百度”软件中, 2、然后在其中输入“百度识图”, 3、之后点击图中的“开始使用”按钮, 4、紧接着点击右下角的“相册”功能, 5、在相册下 ......

    软件教程 2023-02-17
  •   文/黎明  一场针对中国互联网巨头的反垄断风暴正在酝酿,而且这次动真格了。  11月10日,国家市场监管总局发布《关于平台经济领域的反垄断指南(征求意见稿)》,要加大对互联网巨头涉嫌垄断的调查和监管。 ...

    热议 2020-11-14
  • 答:华为P系列: 华为p40,华为p40plus,华为p50,华为p50e,华为p60 华为mate系列: 华为mate40,华为mate50,华为mate50e,华为mate60 华为nova系列: 华为n ......

    鸿蒙系统 2023-04-24
  • 1、首先打开小米运动的“实验室功能”。 2、接着点击“门卡模拟”。 3、然后点击“我知道了”。 4、最后贴近就可以刷卡成功了。...

    硬件知识 2023-05-17
  • 近期有用户反映,电脑在更新Windows 11 Insider Preview 25252.1000后,出现了应用和已压缩的文件点击毫无反应,拖拽都不行,只能从开始菜单打开的情况,这是怎 ......

    windows11 2022-12-13
  • 答:骁龙8+更好。 骁龙7+gen2实际上就是骁龙8+的低配版本。 在一些其他的核心架构方面都是保持一致的,比如说CPU的架构、GPU的架构等等。 骁龙7+和骁龙8+具体 ......

    硬件知识 2023-04-06
  • win11系统快速跳过联网创建本地管理账户3种方法?现在市面上销售的品牌笔记本和台式机基本上都预装Windows11家庭中文版正版操作系统,联网后系统会自动激活。当用户拿到新机器后还需要按照cortana(小娜)的提示一步...

    windows11 2022-11-13
  • 相信有非常多使用过笔记本的用户都听说过独显直连这个词,但很多用户并不了解独显直连是什么,又有什么用处,那么下面就和小编一起来看看什么是独显直连和开启这 ......

    其它 2022-12-15
  • win11系统如何释放掉系统默认保留的存储空间?一般情况下,Windows会保留一些存储空间,以便设备获得良好性能和成功更新。但是当出现系统盘储存空间不足时,我们会将几个G的保留空间释放出来,以解燃眉之急。本期教...

    windows11 2022-11-17
  • 假设有 A、 B 两台 Linux 服务器,我们希望能够从其中一台服务器通过 SSH 免密码登录到另一台服务器。 两台服务器的信息如下:  ......

    服务器 2022-10-14
  • 背景 有时候我们需要获取文件的创建时间。 例如: 我在研究 《xtrabackup 原理图》的时候,想通过观察确认 xtrabackup_log 是最早创建 并且是 最晚保存的 ......

    服务器 2022-10-17
  • 文件被win10系统误报病毒自动删除了如何进行恢复?有用户下载了某些破解软件却被Win10系统误认为是病毒文件而自动删除,当然系统自带杀毒软件其实挺不错的,就是有时候会误报,大家遇到这种情况的时候就希望把误删的...

    windows10 2022-11-20
  • 在填写一些项目申请书中,总是免不了要选择一些数字,但是在方框中如何插入数字,该怎么办呢?那么下面就由学习啦小编给大家分享下word在方框里输入数字的技巧, ......

    Word教程 2023-04-27
  • ​微信小程序能跳转到H5页面吗?当然可以,而且部署起来并不难,使用web-view组件就能做到。在小程序的实际业务开发中,总需要通过跳转到H5页面来满足更 ......

    网络 2022-11-26
  • win11系统开机总是自动登录OneDrive如何关闭?win11系统开机的时候,会自动启动OneDrive,不想要启动,该怎么操作呢?下面我们就来看看详细的教程。 在OneDrive界面点小齿轮按钮,下拉菜单中点【设置】。 单击【...

    windows11 2022-11-15
  • 答:性能上差不多是和天玑9000以及骁龙8+处于差不多的水平。 也可以看成是骁龙8+的降配版本 骁龙7+处理器介绍 1、高通称这款芯片为“骁龙史上最强 7 系平台” ......

    硬件知识 2023-04-06
  • WPS Office手机版怎么加横线?很多用户还不知道WPS Office手机版怎么加横线,WPS Office手机版怎么加横线,WPS Office手机版怎么打横线,WPS Office手机版怎么弄 ......

    WPS教程 2023-03-31
  • 联想电脑的win11系统如何跳过联网激活过程?联想win11跳过联网激活,只需要简单的5步就可以实现:1、打开任务管理器;2、选择任务;3、结束任务。 联想win11跳过联网激活方法 按下快捷键 在联网激活页面,按下快...

    windows11 2022-11-20
  • 苹果mac系统访问Windows共享文件夹的方法详解?相信大多数的用户用Windows访问Windows的共享文件夹是一件很容易的事,但是如果用Mac来访问Windows共享文件夹就会遇到很多的麻烦了,尤其是设置是比较有区别的吗,今天...

    苹果MAC 2022-11-29
  • 可见单元格就是不包括隐藏或者筛选筛选后隐藏起来的单元格区域。方法:筛选或隐藏数据,复制需要粘贴的值,在目标单元格区域左上角的第一个单元格处右击,选择【 ......

    WPS教程 2022-12-10
  • 答:3070ti性能好 但是4070的比较便宜。 4070和3070ti跑分对比 4070跑分最高可达12189分,3070ti跑分能够达到11700分。 4070和3070ti游戏对比 极限竞速: 14 ......

    硬件知识 2023-04-18
  • 一、N100对比intel i3 1、N100的跑分达到了147210分,这个数据可以达到i3的七代级别。 2、在跑分上也是超越了大部分的I3七代CPU,不过比I3八代要弱势一些。 3 ......

    硬件知识 2023-04-26
  • 1、如果我们登录的是微软账户,那么可以进入微软官网。2、在官网登录账号后,进入“管理”再选择“管理恢复密钥”就能找到恢复密钥了。3、如果没有登录微软账号 ......

    windows11 2023-01-05
  • win10系统电脑一直提示找到可能不需要的应用应该如何解决?最近有很多用户反应电脑老师有这个提示出现,可以进入Windows安全中心设置,取消显示可能不需要的应用,下面本站给大家带来的解决Win10提示找到可能不需要...

    windows10 2022-11-22
  • 小米手机系列: 1、小米12S、小米12S Pro、小米12S ultra 2、小米13 Pro 华为手机: 1、P9、P9plus 2、mate9、mate9pro、mate9保时捷款 3、mate10、mate10pro、 ......

    硬件知识 2023-04-14

热门排行

    最近更新

      返回顶部