繁体   English   中英

Tomcat6中的基本身份验证不适用于目录

[英]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应用程序进行分组。 该容器是:

  • Engine是接收所有请求的高级容器。 它包含几个主机。
  • Host ,是同一虚拟主机中所有Context的容器
  • 上下文 ,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM