我正在开发一个带有Apache Tomcat和Java EE的简单Web应用程序。停止Tomcat以保存用户凭据
即时通讯使用我自己的JDBC域领域来保护和验证用户,我正在使用j_security_check的基本身份验证方法。
我已经实现了一个注销Servlet,一切工作正常。但是当我注销时,我尝试再次登录时,应用程序或浏览器正在使用先前的凭据,它甚至不要求我输入另一个凭证。它只是使用最新的凭证自动登录。只有当我重置服务器并关闭我的浏览器(Chrome)时,tomcat再次询问凭据。
我的目标是防止这种自动登录过程。难道我做错了什么?
更新:我注销Servlet是执行以下操作:
response.setHeader("Cache-Control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
request.getSession().removeAttribute("logonSessData");
request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/index.jsp");
我登录的web.xml看起来就像这样:
<security-constraint>
<display-name>userConstraint</display-name>
<web-resource-collection>
<web-resource-name>User pages</web-resource-name>
<description/>
<url-pattern>/users/*</url-pattern>
<url-pattern>/retos/misiones/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>user</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>SPERO</realm-name>
</login-config>
<security-role>
<description>Usuario registrado de SPERO</description>
<role-name>user</role-name>
</security-role>
<resource-ref>
<description>Spero DataBase Connection Pool</description>
<res-ref-name>jdbc/spero</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
您的注销servlet在做什么?它是否正确地使会话无效? – 2014-09-10 19:49:06
是的,我检查过,当我发送错误的凭据数据时,容器拒绝访问。所以我相信这不是一个身份验证问题 – chntgomez 2014-09-11 01:27:06