BASIC身份验证不会第二次显示受约束资源的身份验证弹出窗口

时间:2014-01-09 08:40:23

标签: authentication servlets

我正在尝试BASIC身份验证机制。当我第二次尝试访问受限资源时,没有出现用户名和密码的弹出窗口。

以下是我的tomcat-users.xml

中定义的角色和用户
<role rolename="Admin"/>  
<role rolename="Member"/>
<role rolename="Guest"/>    
<user username="Annie" password="admin" roles="Admin, Member, Guest"/>    
<user username="Diane" password="coder" roles="Member, Guest"/>    
<user username="Ted" password="newbie" roles="Guest"/>    

以下是我的web.xml中定义的条目

<web-app>

<display-name>SecurityApp</display-name>    

<servlet>
<servlet-name>BeerAppServlet</servlet-name>    
<servlet-class>com.example.servlets.BeerAppServlet</servlet-class>    
</servlet>    
<servlet-mapping>    
<servlet-name>BeerAppServlet</servlet-name>   
<url-pattern>/Beer/AddRecipe</url-pattern>   
</servlet-mapping>    

<security-role> <role-name>Admin</role-name> </security-role>    
<security-role> <role-name>Member</role-name> </security-role>    
<security-role> <role-name>Guest</role-name> </security-role>   

<security-constraint>
 <web-resource-collection>
  <web-resource-name>Update</web-resource-name>
  <url-pattern>/Beer/AddRecipe/*</url-pattern>
 </web-resource-collection>

<auth-constraint>
 <role-name>Admin</role-name>
 <role-name>Member</role-name>
</auth-constraint>

</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
</login-config>

</web-app>

我的webapp名称是SecurityApp。 这是我第一次访问我的应用程序,如下所示 http://localhost:8083/SecurityApp/Beer/AppRecipe我获得了输入用户名和密码的弹出窗口,我输入以下凭据username = Diane password = coder。输入上述凭证后,身份验证成功。

第二次输入此网址http://localhost:8083/SecurityApp/Beer/AppRecipe时。 我没有获得用户名和密码的身份验证弹出窗口。为什么会如此。任何人都可以解释

2 个答案:

答案 0 :(得分:1)

使用basic access authentication凭据存储在客户端(您的浏览器)。

每次您向同一页面请求时,网络浏览器都会负责创建BASE64 - 用户名和密码的编码以及自动发送。这意味着您无需重新输入凭据即可立即“登录”。

您可以关闭并打开浏览器,再次显示用户名/密码对话框。

答案 1 :(得分:1)

因为浏览器会缓存页面和身份验证领域的凭据(用户名,密码),并在您下次访问该页面时自动发送它们。这是BASIC身份验证的工作原理。如果关闭(浏览器的所有实例),它将再次请求凭据,除非将其配置为永久存储它们。您可以查看this相关问题。