Java Tomcat6中的基本身份验证不适用于目录
我的tomcat web目录中有以下结构Java Tomcat6中的基本身份验证不适用于目录,java,tomcat,authentication,web.xml,Java,Tomcat,Authentication,Web.xml,我的tomcat web目录中有以下结构 /webapps/ROOT.war /webapps/ROOT/ /webapps/protect/ 在我的ROOT.war java应用程序中的web.xml中,我已经为根应用程序的一些页面配置了基本身份验证,这些页面工作正常 但是我需要将相同的规则应用于目录“protect”,它不是根应用程序的一部分。我将这些规则添加到根应用程序内部的web.xml和/opt/tomcat/conf/中的web.xml文件中,但是目录“protect”仍然可以在没
/webapps/ROOT.war
/webapps/ROOT/
/webapps/protect/
在我的ROOT.war java应用程序中的web.xml中,我已经为根应用程序的一些页面配置了基本身份验证,这些页面工作正常
但是我需要将相同的规则应用于目录“protect”,它不是根应用程序的一部分。我将这些规则添加到根应用程序内部的web.xml和/opt/tomcat/conf/中的web.xml文件中,但是目录“protect”仍然可以在没有身份验证的情况下访问。有什么想法吗
这是适用于根路径但不适用于保护路径的安全配置:
<security-constraint>
<web-resource-collection>
<web-resource-name>Some paths need authentication</web-resource-name>
<url-pattern>/rest/*</url-pattern>
<url-pattern>/protect/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>authenticatedUser</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
某些路径需要身份验证
/休息/*
/保护/*
得到
邮递
认证用户
没有一个
基本的
假设protect是另一个web应用程序,而不是您的web应用程序的目录ROOT,您可以这样做,但如果您打算将protect用作ROOT的目录,则您不能这样做。相反,您必须将该目录移动到根目录中
因此,假设这两个应用程序是两个不同但相关的web应用程序,那么问题的关键是您希望为这两个web应用程序共享相同的安全配置,并且希望从其中一个应用程序的web部署描述符中执行此操作
恐怕这是不可能的,因为web部署描述符web.xml
设计用于设置其当前web应用程序或上下文的配置
Tomcat有几个容器,允许您对web应用程序进行分组。这些容器是:
- Engine是接收所有请求的高级容器。它包含多个主机
- 主机,是同一虚拟主机内所有上下文的容器
- 上下文,web应用程序
conf/server.xml
全局或感兴趣的主机内部
这将允许您为主机内的所有上下文共享相同的用户和凭据源。然后,您可以分别配置每个上下文
甚至可以在同一主机内的所有上下文之间配置单点登录(请参阅)。我想这才是你真正想要的。这样,用户会觉得两个web应用程序只是一个
然后,从根上下文中删除protectURL模式,因为它没有意义,并在protectweb.xml
中正确配置它
希望有帮助 假设protect是另一个web应用程序,而不是您的web应用程序的目录ROOT,您可以这样做,但如果您打算将protect用作ROOT的目录,则您不能这样做。相反,您必须将该目录移动到根目录中 因此,假设这两个应用程序是两个不同但相关的web应用程序,那么问题的关键是您希望为这两个web应用程序共享相同的安全配置,并且希望从其中一个应用程序的web部署描述符中执行此操作 恐怕这是不可能的,因为web部署描述符
web.xml
设计用于设置其当前web应用程序或上下文的配置
Tomcat有几个容器,允许您对web应用程序进行分组。这些容器是:
- Engine是接收所有请求的高级容器。它包含多个主机
- 主机,是同一虚拟主机内所有上下文的容器
- 上下文,web应用程序
conf/server.xml
全局或感兴趣的主机内部
这将允许您为主机内的所有上下文共享相同的用户和凭据源。然后,您可以分别配置每个上下文
甚至可以在同一主机内的所有上下文之间配置单点登录(请参阅)。我想这才是你真正想要的。这样,用户会觉得两个web应用程序只是一个
然后,从根上下文中删除protectURL模式,因为它没有意义,并在protectweb.xml
中正确配置它
希望有帮助 url模式是相对于当前webapp的根目录而不是主机应用程序的。因此,在“protect”的web.xml中,您必须将URL模式更改为“/*”
如果所有web应用程序的web资源名称相同,浏览器应在用户输入密码后自动将密码重新发送给所有web应用程序。url模式与当前web应用程序的根目录相关,而不是与主机应用程序相关。因此,在“protect”的web.xml中,您必须将URL模式更改为“/*”
如果所有web应用程序中的web资源名称相同,浏览器应在用户输入密码后自动将密码重新发送给所有web应用程序。您可以尝试使用符号链接保护其免受ROOT用户的攻击吗?@mikep谢谢您的提示,有关如何使用符号链接的更多信息?没有这方面的经验…保护Web应用程序吗?如果是这样,您可以在protect的web.xml中执行与ROOT相同的操作。否则,您可以在ROOT下移动protect,ROOT的web.xml将起作用(类似于symlink)。您可以尝试使用symlink保护ROOT吗?@mikep谢谢您的提示,有关如何使用symlink的更多信息?没有这方面的经验…保护Web应用程序吗?如果是这样,您可以在protect的web.xml中执行与ROOT相同的操作。否则,你可以