tomcat - Tomcat 过滤器映射无法通过 ProxyPass
问题描述
我正在尝试通过使用 web.xml 文件中的过滤器来锁定对我的 Tomcat WebApp 管理部分的访问。
<filter>
<filter-name>Remote Address Filter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
<init-param>
<param-name>allow</param-name>
<param-value>**my ip address**</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Remote Address Filter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
当我通过端口(即 address.com:8081/webapp/admin)时它工作得很好,但是我设置了一个 ProxyPass 来通过 address.com/webapp/admin 访问 webapp。我不知道在使用 ProxyPass 时如何运行过滤器。
我这样做是为了拥有一个没有端口号的干净 URL,然后出于安全原因将访问管理 url 结构列入白名单。我也不需要担心通过端口访问,因为端口将通过防火墙关闭。所以我真的只需要通过ProxyPass 过滤访问到一个非常具体的url 结构(即/webapp/admin/*)。
解决方案
所以问题在于 ProxyPass 将 IP 地址切换到本地主机。因此,您必须在 web.xml 文件中添加额外的代码才能访问原始 IP。
<filter>
<filter-name>RemoteIpFilter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RemoteIpFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
推荐阅读
- sql-server - Onprem DevOps 服务器 TFS2019 需要为用户配置文件创建报告。特别喜欢的电子邮件报告
- abp - Abp.io 的 Identity Server 可以从 URL 更改租户吗?
- c# - 无法在动态编译的代码中加载 System.ValueTuple
- php - 如何使用池建立 PHP PDO 连接
- azure - 如何使用服务托管标识在 Azure 中使用 Terraform 预配资源
- sql - 从列表中获取未在表列中定义的元素
- java - C# 客户端和 Java 服务器 - 文件上传获取错误数据。(有时)
- java - 插入数据库后preparedstatement停止工作
- java - 如何使用 Java 和 Selenium 运行电子应用程序
- react-native - Openstreetmaps 的 react-native-maps 中的暗模式