【问题标题】:basic authentication on apacheapache上的基本身份验证
【发布时间】:2014-10-31 10:59:39
【问题描述】:

我有一个使用 Apache 作为 Tomcat 前端的 Java Web 应用程序。 我在 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 打开应用程序时,它不会提示进行身份验证。什么剂量错了?

【问题讨论】:

  • (a) 您是否使用 apache passwd 实用程序创建了用户文件? (b) 您是否重新启动了 apache 或向其发出信号以重新加载其配置? (c) 你有运行在这个 apache 上的虚拟服务器吗?
  • 是的,我使用 passwd 实用程序,然后重新启动 apache。我没有虚拟服务器

标签: java apache


【解决方案1】:

指令应该是:

<Location "/app/secure/">

没有*Location 指令自动应用于该 URL 及其下的所有内容(/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 本身。

【讨论】:

  • 糟糕。现在我看到你在问题中的最后一句话,我注意到它真的应该是/app/secure/。更新我的答案。
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2016-02-08
  • 2012-02-04
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多