问题标签 [tomcat-valve]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1198 浏览

tomcat - org.apache.catalina.authenticator.SingleSignOn 阀门可移植性

我正在考虑使用 tomcatorg.apache.catalina.authenticator.SingleSignOn阀门进行单点登录,如此处所述

如果我采用这种方法,如果我决定将我的应用程序从 tomcat 移动到另一个 Web 容器(例如 jboss、glassfish、weblogic 或 websphere),我需要对我的应用程序做些什么?

0 投票
2 回答
3306 浏览

apache - Apache Tomcat - 两因素身份验证

我正在尝试将两因素身份验证解决方案与托管在 Apache Tomcat 上的邮件服务器集成。现在,该应用程序正在使用基于表单的身份验证,用户输入他的用户名和密码,并针对作为后端的 openLDAP 进行身份验证。

我们想要的是以下内容 -

1)。用户输入他的 Un 和 PWD
2)。该请求被“拦截”并被“搁置”
3)。生成一次性密码 (OTP) 并将其作为 SMS 发送给用户。
4)。用户会看到一个新页面,其中包含一个用于输入该 OTP 的框。
5)。用户输入作为 SMS 发送的他/她的 OTP
6)。验证 OTP,如果为真,则转发步骤“2”中的“保留”请求以进行进一步验证

问题是我无法访问邮件服务器应用程序的源代码。

我可以使用 ISAPI 过滤器在 IIS(Microsoft) 中实现非常相似的功能,但需要知道如何在 Apache 中实现此功能?

我正在查看 Valve/Filter 和 SAML 的行,但不知道如何以及在哪里进行。

0 投票
1 回答
244 浏览

tomcat-valve - 自定义访问日志 (Apache Tomcat 7.0.8) 保持为零 kb

我正在尝试创建 AccessLog 的缩短/自定义版本(将其命名为 Stats_log)以从请求中注销一些项目(HTTP 代码、响应时间、请求类型)。

所以我复制了完整的 AccessLogValve 并对其进行了编辑以满足我的需要。重新启动服务器后,会创建新日志,但仍为零(!)0kb。

谁能指出我在这里做错了什么?

奇怪的是,自定义日志在我运行 Apache Tomcat 7.0.2 的测试 ENV 中对我有用(使用相同的设置)。(而 PROD 环境是 7.0.8)。

有什么建议么?

以下是 server.xml 文件中显示的 Valve 设置:

提前致谢!

0 投票
2 回答
1331 浏览

java - tomcat前进阀

我需要在 Tomcat 服务器上进行以下服务器端重定向或转发: URL http://portal.customer_name需要重命名/重定向为http://portal.customer_name/customer_name。所以简而言之,一个没有上下文路径的 url 将被重定向到具有上下文路径的相同 url。我设法通过过滤器做到这一点,使用 request.getRequestDispatcher().forward(request, response); 但是这似乎不适用于阀门。

到目前为止,我得到了以下信息:

我部署了一些似乎接收原始 url 但不接收重定向的 servlet。是否可以像这样进行服务器端重定向。请注意,我需要的是阀门,而不是过滤器。

0 投票
1 回答
1356 浏览

tomcat - Tomcat:Web 应用程序中的自定义表单验证器,而不是作为独立 JAR 模块。可能的?

我们的 Web 应用程序需要内部具有特定逻辑的自定义表单身份验证。当前的表单验证器实现需要验证器模块,我们称之为它custom.auth.jar,在%CATALINA_HOME%/libWeb 应用程序启动之前存在。context.xmlWeb 应用程序使用以下指令使用该自定义身份验证器模块:

据我了解 Tomcat 的要求,在 Web 应用程序启动之前,该模块custom.auth.jar必须存在于 Tomcat 的lib目录中,因为 Web 应用程序似乎不需要与 Web 存档一起打包的身份验证器代码——它总是试图在%CATALINA_HOMA%/lib. 否则 Web 应用程序根本无法启动:

由于鉴权业务逻辑的特殊性和一些保护,我们被迫引入某种鉴权模块的版本控制,并在 Web 应用程序监听器中检查其版本——如果 Web 应用程序发现鉴权模块的版本不兼容(不检查 Tomcat 库目录中提供的 JAR 文件——我们使用反射代替)——它只是拒绝开始报告正在尝试启动的 Web 应用程序和身份验证模块之间的兼容性错误。同样,必须在 中指定现有的context.xml身份验证器模块。

尽管它保护了不兼容的版本,但这带来了一些主要困难:我们不能在同一个 Tomcat 实例中启动同一个应用程序的另一个版本,因为这两个应用程序需要不同版本的身份验证模块。lib但是在 Tomcat 的目录中可以有一个版本。

我的问题是:是否可以将自定义FormAuthenticator直接打包到 Web 应用程序中,而不需要在FormAuthenticator启动 Web 应用程序之前加载单个版本?这将允许启动我们想要的任意多个版本的 Web 应用程序,并且根本不接触%CATALINA_HOME%/lib

换句话说:如何让 Tomcat 从 Web 应用程序中获取自定义身份验证器模块,而不是从其主库目录中获取?谢谢。

0 投票
1 回答
725 浏览

tomcat - 对 accesslogvalve 目录使用环境变量

我想从 setenv.bat 中的值填充 accesslogvalve 中的“dir”。前任:

我在 setenv.bat 中指定了“my.logs.dir”

set my.logs.dir=C:\xyz\abc

当我启动tomcat时,我在tomcat安装下看到一个文件夹${my.logs.dir}。问题是当 tomcat 启动时 ${my.logs.dir} 没有被环境变量替换。如果我给出硬编码值,例如 dir="C:\xyz\abc",它可以正常工作。

谁能指导我在服务器启动时用环境中的值替换 ${my.logs.dir} ?

谢谢

0 投票
1 回答
763 浏览

tomcat7 - 拒绝对内部 Tomcat 目录的 IP 访问

我正在尝试解决以下问题:

我有一个配置(并且应该)接受任何 IP 的 Tomcat Web 应用程序。例如:(协议://主机:端口/MyApp/)

我想要做的是只允许某些 IP 进入存储在我的网络应用程序中的目录,并且在进入时被提示输入用户名和密码。例如:(协议://主机:端口/MyApp/Directory)

我认为配置应该在 context.xml 和/或 web.xml 中完成,但我不知道如何。

0 投票
3 回答
3981 浏览

logging - 如何配置 Tomcat AccessLogValve 隐藏密码?

是否可以将 AccessLogValve 配置为在将密码写入日志文件之前隐藏/替换密码?我对阀门不熟悉,也许有办法插入自定义过滤器/阀门?

0 投票
3 回答
7333 浏览

tomcat - Tomcat通过log4j访问日志?

我有一个启用了 log4j 的干净的 tomcat7 安装(根据http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)。“应用程序级”日志记录确实使用 log4j 配置(我将日志定向到本地系统日志服务器)。如何让我的应用程序access.log也使用 log4j?据我所见,我可以在 AccessLogValve、ExtendedAccessLogValve 和 JDBCAccessLogValve 中进行选择,但其中的一个使我能够登录到 syslog 也不能使用 log4j。

0 投票
1 回答
1494 浏览

tomcat - 如何用阀门修改Tomcat的响应头?

我需要最小化 Tomcat 的响应头。向 tomcat 发送请求的设备在内存中非常有限,因此我想删除标头 Date、Server 和 Content-Type。我用动作挂钩设置了自己的阀门。钩子被调用,但似乎不可能删除日期和服务器标头。

ActionCode == COMMIT首先,我仅在- 不起作用时才执行我的方法。奇怪的。于是我查看了Tomcat源代码:在Tomcat的AbstractHttp11Processorwhen方法action()中ActionCode==COMMIT

  • prepareResponse()被调用(设置的服务器和日期标题),然后
  • 它将标头写入输出缓冲区。

所以无法拦截。当我在调用此操作之前设置标题时,它们会在AbstractHttp11Processor. 当我在那之后设置标题时,它们将被忽略,因为它们已经写入缓冲区。我唯一的机会似乎是重置输出缓冲区并将标头写入缓冲区还是有更好的方法?甚至有可能做到这一点吗?