我已经使用 Apache 的 htpasswd 命令创建了一个用户数据库文件。这个文件现在被其他几个应用程序使用,比如 apache 和 subversion。
中的用户是这样创建的:
htpasswd /path/to/users.htpasswd peter
此用户文件是全局的,而不是每个目录。
如何让 Tomcat 6 使用同一个文件作为安全领域?
我已经使用 Apache 的 htpasswd 命令创建了一个用户数据库文件。这个文件现在被其他几个应用程序使用,比如 apache 和 subversion。
中的用户是这样创建的:
htpasswd /path/to/users.htpasswd peter
此用户文件是全局的,而不是每个目录。
如何让 Tomcat 6 使用同一个文件作为安全领域?
与 htpasswd 最相似的可能是MemoryRealm。我自己很难找到一个如何使用它的简单示例,所以我将在这里发布一个简单的示例代码:
在 tomcat-users.xml 中设置角色、用户名和密码
您的 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>
将此添加到您的 server.xml 文件中:
<Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
为了保护对 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-collection
、auth-constraint
和user-data-constraint
。web-resource-collection 指定了我们应用程序中需要身份验证的部分。/*
表示整个应用程序需要身份验证。auth-constraint 指定用户需要具有的角色才能访问受保护的资源。用户数据约束的传输保证可以是NONE
,CONFIDENTIAL
或INTEGRAL
. 我们将其设置为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 应用程序时,它应该会要求您提供正确的凭据。
也可以看看:
有两种选择:
使用 Apache 作为 tomcat 的前端(使用 mod_jk 或 mod_proxy_ajp)并且 Apache 进行身份验证。您可以在此处找到有关如何执行此操作的详细信息
如果您希望 tomcat 进行身份验证,那么您需要使用除 htpasswd 文件之外的其他内容。有 4 种方法可以保存用户的凭据 - 使用数据库、JNDI/LDAP、XML 文件或 JAAS 提供程序。您可以阅读Realm Configuration HOW-TO中的所有选项。