[英]Basic authentication in Tomcat6 not working on directory
我的tomcat Web目录中具有以下结构
/webapps/ROOT.war
/webapps/ROOT/
/webapps/protect/
在ROOT.war Java应用程序内部的web.xml中,我为ROOT应用程序的某些页面配置了基本身份验证,这些页面可以正常运行。
但是我需要将相同的规则应用于不属于该ROOT应用程序的目录“保护”。 我将这些规则添加到了ROOT应用程序内的web.xml以及/ opt / tomcat / conf /中的web.xml文件中,但是未经身份验证,仍然可以访问目录“ protect”。 有任何想法吗?
这是适用于ROOT路径的安全配置,但不适用于保护路径:
<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>
假定保护是另一个Web应用程序,而不是Web应用程序ROOT的目录,则可以执行此操作,但是如果您打算将保护用作ROOT的目录,则不能这样做。 相反,您必须将该目录移到ROOT内 。
因此,假设两者都是两个不同但相关的Web应用程序,那么问题的关键是要为两个Web应用程序共享相同的安全配置,并且要从其中一个的Web部署描述符中进行共享。
恐怕这是不可能的,因为Web部署描述符web.xml
旨在设置其当前Web应用程序或Context的配置 。
Tomcat具有多个容器,可用于对Web应用程序进行分组。 该容器是:
还有一个“群集”容器,但此处与它无关。
由于您要共享通用的安全配置,因此必须至少在主机级别上(也就是说,在conf/server.xml
全局或在您感兴趣的主机内部)创建一个Realm (请参阅什么是Realm )。
这将使您可以为Host内的所有Context共享相同的用户和凭据源。 然后,您可以分别配置每个上下文 。
甚至可以在同一Host内的所有Context之间配置Single Sign On(请参阅Host级的Single Sign On )。 我认为这是您真正想要的。 这样,如果两个Web应用程序都只是一个,用户就会感觉很像。
然后,从ROOT上下文中删除保护 URL模式,因为它毫无意义,并在protect web.xml
了正确配置。
希望能帮助到你!
url-pattern是相对于当前Webapp的根目录而不是主机应用程序的。 因此,在“保护”的web.xml中,您必须将URL模式更改为“ / *”。
如果所有Web应用程序中的Web资源名称均相同,则浏览器应在用户输入密码后自动将密码重新发送给所有Web应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.