一背景

公司安全整改,

要求:系统中对于关键业务操作应确保使用浏览器“后退”功能无法回到上一步操作界面。

提供:凭证提供所有被检查系统关键业务操作后回退视频,视频显示关键业务操作后,使用浏览器的“后退”,无法回到上一步操作界面(例如退出系统、审批等)。

我负责的zbj系统点击退出系统后,在浏览器点击“后退”仍会通过浏览器的缓存,访问到系统内部。

二、实现方式

通常在Java web项目中用户注销是这样实现的:

session().setAttribute("currentUser", null);
或者 session.removeAttribute("currentUser");
</pre></p><p>或者<pre name="code" class="java">session.invalidate();

然后重定向到登录页面。

但这样做的话,在用户注销跳转到登录页面后,如果用户点了浏览器的“后退”按钮,就可以返回到注销前的页面,尽管session已经清空。

这是因为浏览器的后退是使用了本地缓存的。

下面这个办法可以禁止浏览器使用缓存,从而防止这种情况的出现。

新建包com.example.filter,在其中新建类

package com.asd.common.utils;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse; /**
* create by MrZs on 2020/7/9
*/
public class NoCacheFilter implements Filter{ @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException { HttpServletResponse hsr = (HttpServletResponse) res;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res); } @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }

doFilter方法中的setHeader就是告诉浏览器不要使用本地缓存。
然后在web.xml中配置

  <filter>
<filter-name>noCacheFilter</filter-name>
<filter-class>com.asd.common.utils.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>noCacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

其中*.jsp表示对任意jsp页面都使用noCachaFilter进行过滤,你当然可以根据自己的情况灵活运用,只在你不希望被缓存的页面使用。
当然不能忘记在页面中加上登录验证。

原文链接:https://blog.csdn.net/s_targaze_r/java/article/details/42432795

在Java web项目中防止用户注销后使用浏览器中的“后退”按钮返回注销前页面的更多相关文章

  1. 为什么eclipse中启动tomcat后,浏览器中出现404?

    问题描述: tomcat压缩包加压后,启动lib文件夹下面的startup.bat,在浏览器中输入http://localhost:8080/后出现熟悉的界面. 但是在eclipse中,jsp可以正常 ...

  2. idea 中利用maven创建java web 项目

    转自:http://www.linuxidc.com/Linux/2014-04/99687.htm 本文主要使用图解介绍了使用IntelliJ IDEA 12创建Maven管理的Java Web项目 ...

  3. 理解java Web项目中的路径问题

    本文以项目部署在tomcat服务器为例,其他相信也是一样的. 先说明请求页面的写法,在web中,页面路径主要写的有以下几种 1.请求重定向 2.浏览器的请求被服务器请求到新页面(我称为“转发”) 3. ...

  4. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  5. Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  6. java web项目中打开资源文件中文乱码

    1 java web项目中经常使用多模块管理.在某一个模块中添加了一些资源文件.但不是启动项目.有时候需要在程序中读取资源文件内容,打包后放到容器中就不能正常运行了.需要将所有资源文件放到启动项目的 ...

  7. 26.使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及时显示修改后的页面

    转自:https://blog.csdn.net/yuxxz/article/details/51318908 使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及 ...

  8. idea中的java web项目(添加jar包介绍)和java maven web项目目录结构

    java web项目 web项目下web根目录名称是可以更改的 idea中新建java web项目,默认src为Sources Root,当然也可以手动改,在Sources Root下右键只能新建Pa ...

  9. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

随机推荐

  1. NCF WebApi中 Controller的全解析

    简介 上一篇我们说了如何实现一个WebApi,并运行起来 这次我们来说说WebApi的内在,我们到底做了哪些事情 仓库地址:https://github.com/NeuCharFramework/NC ...

  2. 阅读源码很重要,以logback为例,分享一个小白都能学会的读源码方法

    作为一个程序员,经常需要读一些开源项目的源码.同时呢,读源码对我们也有很多好处: 1.提升自己 阅读优秀的代码,第一可以提升我们自身的编码水平,第二可以开拓我们写代码的思路,第三还可能让我们拿到大厂 ...

  3. 【NX二次开发】打开信息窗口UF_UI_open_listing_window

    头文件:uf_ui_ugopen.h函数名:UF_UI_open_listing_window 函数说明:打开信息窗口 测试代码: #include <uf.h> #include < ...

  4. Django基础之模板层

    内容概要 模板层(模板语法) 模板语法传值​模板语法过滤器(内置方法)​模板语法标签(流程控制)​自定义过滤器和标签(了解) 模板的导入与继承(面向对象) 内容详细 1 模板层之模板语法传值 http ...

  5. iNeuOS工业互联网平台,在高校教学实训领域的应用

    目       录 1.      概述... 2 2.      实训柜... 2 3.      培训内容... 4 4.      二次开发培训... 5 1.   概述 中国工业互联网从 0 ...

  6. Acwing Arithmetic Learning:数据结构(2)

    目录 数据结构(2)acwing 1.trie树 2.并查集(近乎O(1)) 3.堆 数据结构(2)acwing 1.trie树 快速存储和查找字符串的集合 结构特征: 例题:Trie字符串统计 ? ...

  7. Java-学习日记(Java8异步)

    今天用到的中异步操作:异步编程与异步处理数据 //里面返回其他接口服务使用CompletableFuture CompletableFuture.runAsync(()->{ driverNoR ...

  8. qemu-ga windows下的安装及监控开发

    windows安装qemu-ga 虚拟机配置里添加virtio serial端口 #virsh edit instance-name devices里添加下面这段配置, 1 <channel t ...

  9. Terraform入门教程,示例展示管理Docker和Kubernetes资源

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  10. kubelet分析-csi driver注册分析-Node Driver Registrar源码分析

    kubernetes ceph-csi分析目录导航 Node Driver Registrar分析 node-driver-registrar是一个sidecar容器,通过Kubelet的插件注册机制 ...