我的两部分目标是:
1.记录Tomcat的日志(例如catalina.out到浏览器)-成功
2. 要求对这些日志文件进行身份验证 - 不成功
以下更改后第 1 部分成功:
Add file tomcat/conf/Catalina/localhost/logs.xml
With the following configuration:
<Context override="true" docBase="/opt/tomcat/logs" path="/logs" />
可以看到日志路径: http://www.domainname.com/logs/catalina.out
进行以下配置更改后,第 2 部分未成功。该文件不受浏览器中基于表单的身份验证的保护(即访问 http://www.domainname.com/logs/catalina.out 时没有重定向登录)。
根本原因是日志目录的相对上下文吗?
以下是我所做的配置更改:
2A. Within tomcat/conf/tomcat-users.xml
Add the following configuration:
<role rolename="role1"/>
<user username="roleUser1" password="PASSWORD" roles="role1"/>
2B. Within tomcat/conf/web.xml
Add the following configuration:
<security-constraint>
<display-name>Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Profile Area</web-resource-name>
<url-pattern>/logs/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Form-Based Authentication Area</realm-name>
<form-login-config>
<form-login-page>/loginPage</form-login-page>
<form-error-page>/errorPage</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>role1</role-name>
</security-role>
最佳答案
您的应用程序上下文路径是 /logs
, 所以你的 <url-pattern>
应设置为 *
而不是 /logs/*
.
为什么不保护整个 URL 空间呢?这应该是 100% 的行政申请。
编辑 2018-08-27
不要修改 Tomcat 的 conf/web.xml
非常重要。这是服务器上所有 Web 应用程序 的默认部署描述符。它不是某种涵盖整个服务器的配置。所以,试图保护/logs
从那里实际上保护了 URL 前缀 /logs/*
在每个应用程序中分开,而不是您决定放在 /logs
下的单个应用程序.
相反,您应该修改应用程序的 WEB-INF/web.xml
部署描述符。
所以,回去恢复Tomcat的conf/web.xml
到它的原始状态,然后将您的自定义配置放入 /logs
应用程序本身。我不会使用 /opt/tomcat/logs
作为 docBase
为申请。相反,我会部署 logs
应用到webapps
像往常一样,并将其配置为使用 /opt/tomcat/logs
作为只读 resource (尝试使用 PreResources
)。
关于基于 Tomcat 表单的身份验证不保护 catalina.out 登录到浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900230/