gpt4 book ai didi

jsp - 防止用户在注销后看到以前访问过的安全页面

转载 作者:行者123 更新时间:2023-12-01 17:32:40 25 4
gpt4 key购买 nike

我的要求是最终用户在注销/注销后不应返回受限页面。但目前,最终用户可以通过浏览器后退按钮、访问浏览器历史记录甚至在浏览器地址栏中重新输入 URL 来完成此操作。

基本上,我希望最终用户在注销后不能以任何方式访问受限页面。我怎样才能最好地实现这一目标?我可以使用 JavaScript 禁用后退按钮吗?

最佳答案

可以但不应该禁用浏览器后退按钮或历史记录。这对用户体验很不利。有一些 JavaScript hack,但它们并不可靠,而且当客户端禁用 JS 时它们也不起作用。

您的具体问题是请求的页面是从浏览器缓存加载的,而不是直接从服务器加载的。这本质上是无害的,但确实让最终用户感到困惑,因为他/她错误地认为它确实来自服务器。

您只需要指示浏览器缓存所有受限制的JSP页面(因此不仅仅是注销页面/操作本身!)。这样,浏览器被迫从服务器而不是从缓存请求页面,因此服务器上的所有登录检查都将被执行。您可以使用 Filter 来执行此操作设置 necessary response headersdoFilter() 方法中:

@WebFilter
public class NoCacheFilter implements Filter {

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

chain.doFilter(req, res);
}

// ...
}

将此过滤器映射到感兴趣的url-pattern,例如*.jsp

@WebFilter("*.jsp")

或者,如果您只想将此限制放在安全页面上,那么您应该指定一个涵盖所有这些安全页面的 URL 模式。例如,当它们都在文件夹 /app 中时,则需要指定 /app/* 的 URL 模式。

@WebFilter("/app/*")

更重要的是,您可以在检查登录用户是否存在的同一过滤器中完成此工作。

测试前不要忘记清除浏览器缓存! ;)

另请参阅:

关于jsp - 防止用户在注销后看到以前访问过的安全页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61089185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com