apache的基本身份验证

时间:2014-10-31 10:59:39

标签: java apache

我有一个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打开应用程序时,它不会提示进行身份验证。什么剂量错了?

1 个答案:

答案 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