java - 如何覆盖部署到 Tomcat 的 Web 应用程序中的安全约束

标签 java tomcat jenkins

我有点困惑,但一个合理的解决方案可能会帮助很多人(甚至数千人?)。

我想将最新版本的 Jenkins(撰写本文时为 1.599)部署到 Tomcat 容器 (7.0.39),然后强制所有流量使用 SSL。

我将 $CATALINA_BASE/conf/server.xml 中的连接器设置为所需的值。然后我将以下内容添加到 $CATALINA_BASE/conf/web.xml ...

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Jenkins</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>

遗憾的是,这不会起作用,因为它正在被 Jenkins war 中的 web.xml 覆盖。

<security-constraint>
  <web-resource-collection>
    <web-resource-name>other</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <!-- no security constraint --> 
</security-constraint>

据我所知,我无法从 Tomcat web.xml 强制设置。我不会在每次出现新版本时手动编辑我的 WAR,这不是一个选项。

因此,问题是,更改服务器或客户端 web.xml 的最佳方法是什么,以便默认设置仍然存在,但我们可以选择强制传输保证 CONFIDENTIAL。

欢迎任何想法! :)

最佳答案

不确定是否有帮助,但我遇到了相反的问题。公司政策是不允许 PUT、DELETE 或 OPTIONS,因此他们在 tomcat conf/web.xml 中有这样的部分:

<security-constraint>
  <web-resource-collection>
     <web-resource-name>
       restricted methods
     </web-resource-name>
     <url-pattern> /* </url-pattern>
     <http-method> PUT </http-method>
     <http-method> DELETE </http-method>
     <http-method> OPTIONS </http-method>
     <http-method> TRACE </http-method>
  </web-resource-collection>
  <auth-constraint />
</security-constraint>

我发现我可以在子目录的应用程序 web.xml 中覆盖它

<security-constraint>
   <web-resource-collection>
    <web-resource-name>REST Endpoints</web-resource-name>
    <url-pattern>/rest/*</url-pattern>
  </web-resource-collection>
</security-constraint>

但不适用于上下文根(以下不允许 OPTIONS 起作用):

<security-constraint>
   <web-resource-collection>
    <web-resource-name>REST Endpoints</web-resource-name>
    <url-pattern>/*</url-pattern>
   </web-resource-collection>
</security-constraint>

这对您来说意味着您可以毫无问题地为子目录要求 SSL。不确定这是否足以满足您的 Jenkins 要求。

关于java - 如何覆盖部署到 Tomcat 的 Web 应用程序中的安全约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705463/

相关文章:

git - Jenkins 管道 : How to build new artifacts only if has a new commit

java - 如何在 XML 已经工作的情况下添加 JSON 支持?

java - Spring 4.2.5 无法查看日志消息

java - ServerSocket Java 的套接字验证

tomcat - Spring mvc tomcat应用程序部署

java - 如何将 java 参数传递给 Jenkins 中的特定从站?

java.lang.NoClassDefFoundError : loginpackage/LoginServlet (wrong name: WEB-INF/classes/loginpackage/LoginServlet)

session - Jetty/Tomcat session 保存

java - Spring 中带有 url 模式重定向的上下文路径

jenkins - 构建流程、多作业和管道插件之间的区别