JSP,Tomcat 8 BASIC登录/失败尝试保持持久性

时间:2017-06-09 13:00:59

标签: jsp session tomcat authentication browser-cache

问题1

当用户尝试访问他/她没有角色的受限文件时,会将HTTP-403返回给用户。

当尝试使用相同的链接(BASIC身份验证)重新登录以键入不同的凭据时,会记住失败的登录尝试并直接转到HTTP-403,而不需要用户名/密码。

问题2

当用户成功登录并终止他/她的会话时,再次单击登录按钮,他们不会被要求输入他们的登录凭据,因为他们之前的登录“会话”被记住了。

为了尝试修复此行为,我尝试了不同的解决方案,但没有运气

解决方案1 ​​

调用.invalidate()对象

上的request.getSession(false)方法

解决方案2

通过针对请求

上的所有* .jsp页面的过滤器禁用浏览器缓存
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies

我在这里找到了

Add an Expires or a Cache-Control header in JSP

How to control web page caching, across all browsers?

解决方案3

在/META-INF/context.xml

中禁用Tomcat 8缓存
antiJARLocking="true"
antiResourceLocking="true"
cachingAllowed="false"
cacheMaxSize ="0"
cacheTTL="1"
reloadable="false"

在这里找到

how to disable tomcat caching?

取消部署,重新部署项目并重新启动Tomcat。

对于我尝试的所有内容,我已禁用浏览器缓存,例如解决方案2,在登录测试前清除了我的测试浏览器并尝试了私有浏览器窗口。

重定向回登录错误

当我收到HTTP-403错误时,我通过web.xml调用servlet,将用户发送回首页(登录链接所在的位置)

<error-page>
   <error-code>403</error-code>
   <location>/Http403</location>
  </error-page>

通过response.sendRedirect(url)代替转发,强制浏览器为首页/欢迎页面制作一个“全新的”HTTP-GET。我在某个地方看到这是做到这一点的方法但不是100%如果这有任何优势,如果有人知道请告诉我。

发现问题

来自Basic Authentication : Is it possible to setRemoteUser like getRemoteUser()

BASIC身份验证是完全不同的事情。它显示了一个带有用户名/密码输入的简单JavaScript外观对话框。它将身份验证信息存储在客户端,并在每个后续请求中作为请求标头发送

1 个答案:

答案 0 :(得分:0)

我认为过滤器可以解决这个问题,如果用户没有角色,重定向到登录页面,否则他/她可以访问服务器中的资源