一尘不染

如何在不更改tomcat-users.xml的情况下为静态tomcat Web应用程序提供基本的HTTP身份验证?

tomcat

我可以访问tomcat管理器,并且可以上传war文件。这些战争之一是静态Web项目(压缩的html +媒体文件,重命名为*
.war)。我想向此战争中添加Web-INF / web.xml文件,以使用基本的http auth保护内容。

我知道如何通过添加全局用户并在中分配角色来做到这一点tomcat-users.xml,但我想在war文件中定义所有用户名和密码。

  1. 可以在不触摸tomcat的情况下完成此操作tomcat-users.xml吗?
  2. 如果是的话,如何在我的静态项目中指定web.xml呢?

Thx,尤文


阅读 258

收藏
2020-06-16

共1个答案

一尘不染

我在这里找到了解决方案:http
:
//wiki.metawerx.net/wiki/SecuringYourSiteWithContainerManagedSecurity

该页面介绍了如何定义META-INF/context.xml指向您自己的WEB- INF/users.xml。不幸的是,到users.xml文件的链接必须是绝对的,并且我不想对我的配置文件中的OS /文件系统路径做任何假设。

这是我目前的情况WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
    version="2.5">

    <display-name>SuperCoolTool</display-name>
    <description>What an awesome app!</description>

    <security-role>
        <role-name>manager</role-name>
    </security-role>
    <security-role>
        <role-name>keyuser</role-name>
    </security-role>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>
                Entire Application
            </web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>keyuser</role-name>
            <role-name>manager</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Evaluation Area</realm-name>
    </login-config>

</web-app>

匹配META-INF/context.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Realm className="org.apache.catalina.realm.MemoryRealm"
           pathname="[PATH-TO-YOUR-WEBAPP]/WEB-INF/users.xml"/>
</Context>
2020-06-16