JSP,Tomcat 8 BASIC 登录/失败尝试一直存在

标签 jsp session tomcat authentication browser-cache

问题一

当用户试图访问他/她无权访问的受限文件时,将向用户返回 HTTP-403。

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

问题2

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

为了尝试修复这种行为,我尝试了不同的解决方案,但都没有成功

解决方案一

request.getSession(false)对象上调用.invalidate()方法

方案二

通过对请求中所有 *.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?

方案三

在/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,在登录测试之前清除了我的测试浏览器,并尝试了私有(private)浏览器窗口。

错误时重定向回登录

当我收到 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 类似对话框。它将身份验证信息存储在客户端,这些信息作为每个后续请求的请求 header 发送

最佳答案

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

关于JSP,Tomcat 8 BASIC 登录/失败尝试一直存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458530/

相关文章:

java - 无法使用 Eclipse Juno 编译 JSP 类

javascript - 提交表单时需要将字符串包装在 'Single Quotes' 中

java - servlet和jsp有什么区别?

ruby-on-rails - 在 Rails 3 中设置 session 超时

java - JPA/Hibernate 问题(@PrePersist,Session API 说明)

javascript - 避免在 AngularJS 中直接访问 URL

tomcat - 别名 [tomcat] 不识别键条目

java - Apache Tomcat Servlet - 线程 "main"java.lang.ClassFormatError 中的异常

java - 评估列表是否为空 JSTL

tomcat - 是否需要使用 servlet(Tomcat、Jetty 等)安装 solr?