问题标签 [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 回答
3151 浏览

tomcat - 如何在没有网络传输时间的情况下测量请求的执行时间?

在我的阀门中,我得到了我的 http 查询的执行时间:

我怀疑我这样得到的时间,不仅给了我服务器端的执行时间,还给了我网络时间?是否可以 ?

(因为根据发出请求的客户端,测量的平均时间与一个 IP 不同,我有 70 毫秒的平均时间和另一个 270 毫秒的 IP)

我在过滤器中编写了完全相同的代码:

,但在我的测试中,阀门和过滤器中的执行时间是相同的......

我对只获取我的 servlet 的执行时间更感兴趣。但如果我也能得到发送最后一个字节的时间,我会感兴趣的。

非常感谢您向我澄清有关阀门和过滤器的知识。

0 投票
0 回答
368 浏览

security - 使用 Jboss/Tomcat 阀门来加密/解密 url,比如一些 url 重写?

我有一个使用 servlet 和 jsps 在 JBoss 上运行的第三方应用程序。我无权访问源代码。

假设一个 servlet 像这样运行: http://localhost/myApp/view.do?clientId=45&command=34

我想获得这个: http://localhost/myApp/view.do?gf844gf4g8fg4f

经过一番谷歌搜索,我发现了这个:http ://www.avedatech.com/Products/QueryCrypt/index.jsp

但它不符合我的需要,因为我无法篡改代码。

我的想法是在任何以http://localhost/myApp开头的查询之前(加密 url) 和另一个之后(解密)放置一个阀门。

不幸的是,我的应用程序编写了清晰的 url,这就是我尝试在服务器级别插入我的进程的原因。结果,出现在浏览器中的任何 url 都将不可读(Javascript 不再能够读取 url 不是问题。)

线索已经涵盖 :) :我们已经在 HTTPS 在 url 的末尾放置一个哈希,并确保计算的哈希相等,如果不匹配则拒绝访问。这可以防止篡改,但不能防止用户看到变量。

这可行吗?

谢谢您的帮助。

0 投票
1 回答
2494 浏览

tomcat - 如何将 Valve 添加到 Apache Tomcat

我通过扩展 org.apache.catalina.valves.ValveBase 类并实现 inovoke() 方法为 Apache Tomcat 编写了 Valve。现在我想将它添加到我的 Tomcat 中执行?请告诉我步骤。

0 投票
1 回答
187 浏览

tomcat - 在Tomcat上运行时如何从存储在httpsession上的地图中获取价值

使用Tomcat,可以通过配置适当的阀门将一堆有趣的信息转储到日志文件中。

例如:

方法:

  • %s - 输出响应的 HTTP 状态码
  • %b - 发送的输出字节数,不包括 HTTP 标头,如果为零,则为“-”
  • %I - 线程 ID

而 %{myname} 的含义是输出存储在会话中的属性 myname 的值。

都好。如果我的会话中存储了一个哈希图,我可以通过执行以下操作来输出:

有关详细信息,请参阅http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html

但是,我只想输出特定键的值,而不是整个地图。我努力了:

但这不起作用。任何想法如何做到这一点?

0 投票
2 回答
680 浏览

web-services - 提取使用 Tomcat Valve 接收到的 SOAP 消息的方法是什么

我正在尝试通过扩展org.apache.catalina.valves.ValveBase类来为 Apache Tomcat 创建一个自定义 Valve。它有方法public abstract void invoke(Request request,Response response)。在我的 Tomcat 容器中,我有 Axis2,它托管了一个 Web 服务。所以我的问题是找到一种方法来使用这个自定义阀门将 SOAP 消息提取到该 Web 服务。那么使用参数org.apache.catalina.connector.Request和获取 SOAP 消息的方法是org.apache.connector.Response什么?

0 投票
1 回答
290 浏览

tomcat - 我们可以专门为 Tomcat Web 应用程序使用 Valve

我在 Tomcat 容器中托管了一些 Web 应用程序,我们可以专门为 Web 应用程序使用 Valve 吗?请给我一个方法。

0 投票
2 回答
5246 浏览

java - 试图获取请求参数以访问tomcat的登录

我试图调查特定 HTTP 请求被发送到网站的频率。该请求是一个 POST 并且有一个名为 的参数"_method"。我可以在萤火虫中看到这一点。

我需要检查此"_method"参数的值,因此按照文档http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access_Log_Valve我将以下内容添加到阀门的 tomcat 访问配置中

但它没有出现在访问日志中。

我想知道是因为下划线吗?

注意,参数名称不能更改。

0 投票
1 回答
492 浏览

java - 我的 WebApp 如何通过 Tomcat Valve 检索数据集?

我正在尝试检索由 JSF2 支持 bean(或 servlet)中的自定义 Tomcat Valve 设置的值。我看不到如何做到这一点,也找不到使用 Google 的任何示例。

背景:在我的 JSF2 Web 应用程序中,我需要为每个用户添加一个时区属性。实现这一点的最简单方法是在用户个人资料页面中添加一个时区下拉菜单,以便每个用户都可以选择合适的时区。然而,这可以自动化,因为浏览器中的一些 JavaScript能够自动计算时区。

所以我在我的 Tomcat 登录页面上放置了一个新参数,它提供了这个值,Web 应用程序可以在登录时捕获它。Tomcat 表单身份验证机制负责处理登录页面(通过 HTTP POST 到 j_security_check)。我实现了一个 Java EE Servlet 过滤器来捕获这个,但是 Tomcat 的登录机制绕过了过滤器,所以这段代码永远不会看到 POST 到 j_security_check。

我现在已经实现了一个 Tomcat Valve,我可以成功地将 POST 捕获到 j_security_check。在代码中,我提取时区值并将其放在......在哪里?

我知道阀门(必须放在 TOMCAT_HOME/lib 中)与我的常规 JSF2 代码具有不同的类加载器。这意味着我无法从我的 JSF2 代码访问阀门的任何静态成员。

因此,受到标准 Tomcat 阀门源代码的启发,我在阀门中尝试了这个:

但是,在我的 JSF2 托管 bean 中,我无法获得对 org.apache.catalina.Session 的引用。

此代码返回一个 StandardSessionFacade 类型的对象,它不允许我访问 org.apache.catalina.Session。

FacesContext.getCurrentInstance().getExternalContext().getSession(false);

在调试模式下运行,我已经能够找到 org.apache.catalina.Session,但 'notes' 字段实际上是空的。

我还认为 Tomcat 可能会使用一个会话进行登录,然后再创建一个新会话(可能与Session Fixation Protection相关)。如果确实如此,我认为问题会更加复杂。

任何 Tomcat 大师有什么好主意吗?普通 servlet 的解决方案也是可以接受的,因为我确信我能够适应它。

0 投票
0 回答
1201 浏览

tomcat - 从 Tomcat 单点登录中排除管理器

在没有 Apache 的 Tomcat 服务器上使用 JAAS 进行 SSO。SSO 控制对几个相关应用程序的访问,效果很好。最近我开始从 Ant 迁移到 Maven,为了使用 Maven 的 Tomcat 插件,我需要设置我以前不需要的 Tomcat Manager 应用程序。我能够通过 BASIC 身份验证或 CLIENT-CERT 身份验证以及服务器上的其他 webapps 来启动并运行它。

我遇到的问题是当用户在管理器中进行身份验证时,其他 webapps 的会话被丢弃 - IE 登录到 webapp,登录到管理器,刷新 webapp,重定向到登录页面。

我能够通过在上下文级别定义 SSO 阀和在主机级别定义领域来减轻这种重叠。这仍然允许 SSO 在通过浏览器在 web 应用程序之间导航时工作。但是,跨上下文 AJAX 请求和诸如此类的返回“用户未登录”错误,直到我访问其他有问题的 web 应用程序。使用这种方法对 Manager 进行身份验证有效地与其他 webapp 隔离。

简而言之,我正在寻找使用 JAAS 身份验证模块为我的 webapps 提供通过 SSL/数据库身份验证的 SSO 的最佳方式,但强制 Tomcat 从 SSO 中排除 Manager。IE SSO 通过 SSL 用于 Webapps 1、2、3,但 UN/PW 身份验证独立于 Manager 的 SSO,两者之间的身份验证独立。

有没有办法做到这一点?

当前配置:

使用此配置,所有 webapps 和管理器都在 SSO 的控制之下,并且发生了上述重叠 - IE 通过 SSL 登录到 webapp1,然后通过 UN/PW 管理器,然后刷新 webapp1,重定向到登录页面。

将 SSO 阀移动到 webapps 的上下文可以解决此问题,但会导致跨上下文 AJAX 请求的“用户未登录”响应。

0 投票
2 回答
14035 浏览

java - Tomcat:在日志中获取“字符解码失败”;可能的恶意攻击?

我刚刚让一个 Tomcat 实例停止响应(它在被杀死并重新启动后开始正常工作),并且在日志消息中,它看起来就像在它停止响应之前有人正在向它发送无效请求的垃圾邮件。以下是日志文件的摘录:

日志中有相当多的内容。有没有人见过类似的东西?这是一次恶意攻击,还是 Tomcat 实例只是翻转/发疯了?

更实际的是,我可以做些什么,例如在 a ValveorFilter中,检测此类请求并暂时禁止原始 IP 地址?我假设因为 Tomcat 无法解码乱码参数,所以我不能只寻找无意义的参数名称,如果找到就拒绝请求。

编辑

同样的问题再次发生,这次我捕获了一个线程转储。它很长(实际上太长了,无法完整包含在内):

在我的脑海中,看起来等待 HTTP 守护线程的数量异常。