我有一个java Web应用程序,它使用Apache作为Tomcat的前端。 我在web.xml文件中有基本的身份验证配置
<security-constraint>
<web-resource-collection>
<web-resource-name>
</web-resource-name>
<url-pattern>/secure/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
现在我想在apache上设置此配置
我在C:\ Program Files(x86)\ Apache2 \ conf目录中创建了用户文件并添加了用户名/密码。
我在httpd.conf文件中添加了这一行
<Location "/secure/*">
AuthUserFile conf/users
AuthName "This is a protected area"
AuthType Basic
Require valid-user
</Location>
当我使用浏览器http://example.com/app/secure打开应用程序时,它不会提示进行身份验证。什么剂量错了?
答案 0 :(得分:0)
指令应该是:
<Location "/app/secure/">
没有*
。 Location
指令会自动应用于该网址及其下的所有内容(/app/secure/myServlet
,/app/secure/more/otherServlet
等)。
如果你想在该位置进行模式匹配,你应该使用LocationMatch
,但我认为对你来说这是不必要的。
请注意,Location
字符串必须是从域后面的斜杠开始的整个路径。因此,如果您的域名为http://example.com/app/secure/
,则Location
不仅仅是/secure/
,而是/app/secure/
。
或者,如果您实际使用app/secure
而非app/secure/
访问应用程序,则应删除最后一个斜杠:
<Location "/app/secure">
/app/secure/
匹配/app/secure/something
,但与/app/secure
不匹配。 /app/secure
匹配/app/secure/something
,但也匹配/app/secure
。