5

我已经使用 Apache 的 htpasswd 命令创建了一个用户数据库文件。这个文件现在被其他几个应用程序使用,比如 apache 和 subversion。

中的用户是这样创建的:

htpasswd /path/to/users.htpasswd peter

此用户文件是全局的,而不是每个目录。

如何让 Tomcat 6 使用同一个文件作为安全领域?

4

3 回答 3

3

与 htpasswd 最相似的可能是MemoryRealm。我自己很难找到一个如何使用它的简单示例,所以我将在这里发布一个简单的示例代码:

  1. 在 tomcat-users.xml 中设置角色、用户名和密码

  2. 您的 web.xml 应包含以下内容:

       <security-constraint>
         <web-resource-collection>
          <web-resource-name> 
            My Protected WebSite 
          </web-resource-name>
          <url-pattern> /* </url-pattern>
          <http-method> GET </http-method>
          <http-method> POST </http-method>
        </web-resource-collection>
        <auth-constraint>
        <!-- the same like in your tomcat-users.conf file -->
          <role-name> test </role-name>
        </auth-constraint>
      </security-constraint>
       <login-config>
        <auth-method> BASIC </auth-method>
        <realm-name>  Basic Authentication </realm-name>
      </login-config>
      <security-role>
        <description> Test role </description>
        <role-name> test </role-name>
      </security-role>
    
  3. 将此添加到您的 server.xml 文件中:

    <Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
    
于 2010-02-08T07:27:28.467 回答
3

为了保护对 Tomcat webapp 的访问,您可以实现简单的安全约束(例如 in /var/lib/tomcat7/webapps/*/WEB-INF/web.xml),如下所示(只需在</web-app>结束前添加):

<!-- This security constraint protects your webapp interface. -->
<login-config>
  <!-- Define the Login Configuration -->
  <auth-method>BASIC</auth-method>
  <realm-name>Webapp</realm-name>
</login-config>
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Admin</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>*</role-name>
  </auth-constraint>
  <!-- Specifying a Secure Connection -->
  <user-data-constraint>
    <!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE -->
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<!-- Authorization, see: tomcat-users.xml --> 
<security-role>
  <role-name>*</role-name>
</security-role>

login-config 元素包含auth-method指定我们使用的身份验证方法的元素,即BASIC. 该security-constraint元素包含 3 个元素:web-resource-collectionauth-constraintuser-data-constraint。web-resource-collection 指定了我们应用程序中需要身份验证的部分。/*表示整个应用程序需要身份验证。auth-constraint 指定用户需要具有的角色才能访问受保护的资源。用户数据约束的传输保证可以是NONE,CONFIDENTIALINTEGRAL. 我们将其设置为NONE,这意味着SSL当您尝试访问受保护的资源时不需要重定向到。

还要确保你有线:

<Realm className="org.apache.catalina.realm.MemoryRealm" />

在您的conf/server.xml(Engine部分) 内。

如果您没有更改任何配置文件,请检查conf/tomcat-users.xml安装中的文件 ( locate tomcat-users.xml)。该文件必须包含允许您使用 Tomcat webapp 的凭据。

例如,要将 manager-gui 角色添加到tomcat密码为的用户s3cret,请将以下内容添加到上面列出的配置文件中:

<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>

然后您可以访问您的 webapps 管理器/manager/html(例如在配置更改后重新加载)。

阅读更多:Manager App HOW-TO

然后重新启动您的 Tomcat,当访问您的 web 应用程序时,它应该会要求您提供正确的凭据。

也可以看看:

于 2015-04-10T15:14:54.533 回答
2

有两种选择:

  1. 使用 Apache 作为 tomcat 的前端(使用 mod_jk 或 mod_proxy_ajp)并且 Apache 进行身份验证。您可以在此处找到有关如何执行此操作的详细信息

  2. 如果您希望 tomcat 进行身份验证,那么您需要使用除 htpasswd 文件之外的其他内容。有 4 种方法可以保存用户的凭据 - 使用数据库、JNDI/LDAP、XML 文件或 JAAS 提供程序。您可以阅读Realm Configuration HOW-TO中的所有选项。

于 2009-04-02T15:01:21.390 回答