解决在点击登出之后,用户点击浏览器回退按钮能返回去继续操作问题

我在登出之后不但返回到刚才的页面。还因为我设置了拦截器而导致页面出现了我并不想看到的结果。

于是我着手对着问题进行了优化解决:

一开始我想这么做:在每张页面都有session判断,如果session为空则返回登录界面。但是就结果而言。出现了上面图片中的结果

后来我又想从前端页面着手,通过写js      window.location.href返回登录界面。

这是代码:

    <script type="text/javascript">
        windows.location.href="/login/index"
    </script>

在IE浏览器中完美解决。但我用火狐测试了一下。。。唉。?还是不得行?

我马上去检查了我的java代码

        //获得session
        HttpSession session = req.getSession();
        //拿到session里面的属性
        Object attribute = session.getAttribute("USER_IN_SISSION");
        //如果前台没有传信息,就跳转回登陆页面
        if (attribute==null) {
            //跳转回登陆页面
            req.getRequestDispatcher("/login/index").forward(req, resp);
            System.out.println("拦截器执行了");
            return false;
        }
        return true;   
    @RequestMapping("/out")
    public String out(HttpServletRequest req) throws ServletException, IOException {
        // 获得session
        HttpSession session = req.getSession();
        // 删除session里的内容
        session.removeAttribute("USER_IN_SISSION");
        return "redirect:/login/index";
    }

上面这段代码完全没执行。

我又看了看xml配置

    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 不放行的 -->
            <mvc:mapping path="/**"/>
            <!-- 放行的 -->
            <mvc:exclude-mapping path="/login/*"/>
            <mvc:exclude-mapping path="/static/**"/>
            <mvc:exclude-mapping path="/index/*"/>
            <mvc:exclude-mapping path="/upload/*"/>
            <mvc:exclude-mapping path="/templates/*"/>
            <!-- 配置拦截器 -->
            <bean class="cn.king.web.Intercetor" />
        </mvc:interceptor>
    </mvc:interceptors>

嗯。。。我自闭了。。。

我打了断点进debug调试。后台代码没什么问题。我想那就是前台页面了。我跟着去验了验拦截器对我没放行的路径是否进行了拦截。

结果,我发现了我这个项目的一个bug

因为我的主页面是这样写的:

主页是导航栏菜单栏然后嵌套展示页面

因为展示页面都是引用的。所以展示页面上面就不能写上导航栏和菜单栏了。导致如果你不在原路径访问展示页面。通过展示页页面的路径来访展示页。就会出现,导航栏和菜单栏消失的情况

所以当我删除了session后,用户通过浏览器返回按钮能回到刚才那个页面。但那个页面是浏览器缓存所致。

点击操作的时候只有展示页进行了权限跳转。所以出现了我上面那个效果图。

这个情况我只有换前端页面了。因为后台代码逻辑确实有点难处理这个问题。

原文地址:https://www.cnblogs.com/kingofjava/p/10420803.html

时间: 2024-10-08 13:16:03

解决在点击登出之后,用户点击浏览器回退按钮能返回去继续操作问题的相关文章

Django 编写博客网站的用户管理部分(采用自有的 django.contrib.auth) 2. 登陆登出和用户信息管理

续前Django 编写博客网站的用户管理部分(采用自有的 django.contrib.auth) 1. 注册部分 项目工具:Python 2.7.11  Django 1.10.2  Bootstrap 3.3.0   IDE:eclipse Pydev 1. 由于Django自带auth, 故仅需编写登录登出的url和template即可 urls常见上篇 template代码如下仅供参考: login 1 {% extends "account_base.html" %} 2 3

springboot+shrio简易登录登出和用户权限认证。

源码:https://github.com/huangshengz/myJavaDemo本例子参考:https://www.cnblogs.com/HowieYuan/p/9259638.html 本例子验证主要有两个类,一个是自定义的拦截类ShiroConfig,在这里我们自定义了很多需要的操作.例如:角色权限路径,登录路径等,一些具体的含义如下: * anon:无参,开放权限,可以理解为匿名用户或游客 * logout:无参,注销,执行后会直接跳转到shiroFilterFactoryBea

[Django]登陆界面以及用户登入登出权限

前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF  = 'www.urls'#用户请求django站点页面首先检查这个模块 这里的www.urls是我的工程www下urls.py文件 urls.py文件主要设置urlpatterns参数,设置如下: urlpatterns= [    url(r'^$', 'login.views.login_view', name='log

php 用CAS实现SSO单点登陆及登出功能

php用CAS实现SSO单点登陆及登出功能 一..CAS服务器搭建 CAS服务器端下载地址:http://downloads.jasig.org/cas/ 解压cas-server-4.0.0-release.zip将modules目录下的cas-server-webapp-4.0.0.war改名称为cas.war复制到tomcat的webapps下,启动tomcat,访问:http://localhost:8080/cas/login 就可以看到登录界面了: cas服务端默认采用的是 用户名=

经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法

经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrowser控件中自动点击弹出框及禁用脚本提示问题得到如下几种实际情况的解决办法,绝对管用. 1.屏蔽弹出错误脚本 将WebBrowser控件ScriptErrorsSuppressed设置为True即可. (参考本篇博客:http://www.cnblogs.com/qqflying/archive/20

flask笔记:6:用户登入登出

用户登入登出需要用到 Flask-Login 插件 初始化 修改配置文件 app/__init__.py from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy import os from flask.ext.login import LoginManager app=Flask(__name__) app.config.from_object('config') db=SQLAlchemy(app) lm = L

两种方法实现Linux不活动用户登录超时后自动登出

在平常的工作中,windows系统使用的比较多一些,身边的很多同事都会对自己的电脑进行一些个性化设置,比如离开一段时间后自动锁屏.自动关闭屏幕.自动注销当前登录等.在windows下可以这样操作,那么在Linux下是否也可以这样操作呢?经过一段时间的摸索,本人发现了2中方法来实现Linux下不活动用户在登录一段时间后自动登出操作,分享给大家. 方法一.通过修改.bashrc或.bash_profile文件来实现 通过修改home目录下的.bashrc或.bash_profile文件来实现.这两个

django项目 设置session 实现用户登入登出

一.配置文件 settngs.py中 # 使用django认知系统的登录状态装饰器时,没有登录的话,跳往登录页面后路径是/acount/login 需要重新指定 LOGIN_URL = '/user/login' # 设置允许保存session SESSION_SAVE_EVERY_REQUEST = True # 设置session存放在缓存中 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 使用默认选项的缓存设置存放se

从零开始搭建服务器之登录和登出远程服务器

双 11 期间入手了一台云服务器,备案花了一两个星期,这两天终于备案通过了.于是在个人服务器上装了 Docker 容器用于部署项目,准备尽量把所有的服务都打包成容器,方便统一管理运维. 于是利用 docker 搭建了 nginx 作为反向代理服务器,负责请求分发,用 nginx 部署静态博客,用 mysql 暴露给个人项目使用... 但是千里之行始于足下,一切还要从登录登出远程服务器开始,本文基于 Centos7.6 环境,不保证其他环境正常. 环境准备 服务器要求 如果你已经有云服务器或者虚拟