用户登录后重定向到要访问页面

代码下载:login_limit

1、需求场景

  1)分享到其它平台链接用户点击跳转相应平台登录页面,登录后重定向到分享页面

  2)用户停留在某页面长时间未操作至session过期,刷新或点击其他链接重定向到登录页面,登录后要求重定向到要访问页面

2、需求分析

  考虑到登录后要重定向到某个页面,所以在跳转登录页面的时候需要系统存储当前链接,以便在登录后重定向。思路已经非常清晰,由于我们使用拦截器进行用户是否登录判断,因此只需在拦截器的方法里对当前链接进行保存,然后登录重定向即可。具体代码如下:

  由于之前已写过多用户登录限制,因此我们只需在这篇博文的基础上稍作修改即可(具体只需修改登录拦截器即可),修改后代码如下(粗体字代码为修改代码)

  注:需要注意的是异步请求需被过滤(异步请求不会跳转页面,导致登录后页面直接显示请求数据)

package com.utils.interceptor;

import com.entity.User;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 登录拦截器 1、未登录跳转登录页面 2、掉线保存当前链接,重定向到登录页面 3、用户被踢掉后给出提示信息
 */
public class LoginInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("now_user");
        if (user == null) {
            //用户掉线,保存当前链接并重定向到登录页面
            //String s = request.getHeader("x-requested-with");
            if (request.getHeader("x-requested-with") == null) {//非ajax(异步)请求,则保存当前访问链接
                String queryUrl = request.getQueryString() == null ? "" : ("?" + request.getQueryString());//获取参数
                String requestUrl = request.getServletPath() + queryUrl;//httpRequest.getServletPath(),获取链接
                if (session.getAttribute("redirect_link") == null) {
                    session.setAttribute("redirect_link", requestUrl);
                }
            }
            response.sendRedirect(request.getContextPath() + "/other/toLogin");
            return false;
        }

        //多用户登录限制判断,并给出提示信息
        boolean isLogin = false;
        if (user != null) {
            Map<String, String> loginUserMap = (Map<String, String>) session.getServletContext().getAttribute("loginUserMap");
            String sessionId = session.getId();
            for (String key : loginUserMap.keySet()) {
                //用户已在另一处登录
                if (key.equals(user.getUserName()) && !loginUserMap.containsValue(sessionId)) {
                    isLogin = true;
                    break;
                }
            }
        }
        if (isLogin) {
            Map<String, String> loginOutTime = (Map<String, String>) session.getServletContext().getAttribute("loginOutTime");
            session.setAttribute("mess", "用户:" + user.getUserName() + ",于 " + loginOutTime.get(user.getUserName()) + " 已在别处登录!");
            loginOutTime.remove(user.getUserName());
            session.getServletContext().setAttribute("loginUserMap", loginOutTime);
            response.sendRedirect(request.getContextPath() + "/other/toLogin");
            return false;
        }

        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        super.afterCompletion(request, response, handler, ex);
    }
}

  到此,用户登录后重定向到要访问页面的问题完美解决。

时间: 2024-08-05 15:01:06

用户登录后重定向到要访问页面的相关文章

WordPress用户登录后重定向到指定页面

这篇文章将向您展示WordPress用户登录后如何重定向到指定页面或者文章的技巧. 一.重定向到网站管理面板. 将以下代码添加到您的当前主题的 functions.php 文件中: function soi_login_redirect($redirect_to, $request, $user) { return (is_array($user->roles) && in_array('administrator', $user->roles)) ? admin_url() 

原创:PHP利用session,实现用户登录后回到点击的页面(本文以TP为例)

1.以下内容纯属原创,请谨慎选择: ①目的:用户登录超时,session过期,点击后跳转到登录页,登录成功再跳转到鼠标点击的页面. ②流程:用户登录---session过期---点击跳转到登录页---再次登录成功---跳转回点击的页面 ③思路:利用TP自带session默认开启,只要我们的url有变化,那么久将变化的url存入[同名]的session变量中: 用户登录过期,session失效,点击任意url,将该url重新存入session变量中,再次登录成功,redirect到该url即可 ④

MVC 登录后重定向回最初请求的 URL FormsAuthentication.RedirectFromLoginPage

在传统的Asp.net webForm 中如果使用 Form身份验证.登录后重定向到最初请求的页面只需使用 FormsAuthentication.RedirectFromLoginPage 但在MVC中,MVC可不吃这一套.试了很多方法都不行.但最终还是搞定了.之所以标题中写到“FormsAuthentication.RedirectFromLoginPage”.是因为我一开始不停的在Google中找“FormsAuthentication.RedirectFromLoginPage”这个关键

【Java】系统漏洞:关于用户登录后操作的注意事项

项目背景: SpringMVC + Mybatis  + MySql数据库(javaWeb项目开发) 相关模块:登录,个人详细信息修改,订单详情查询 相关漏洞介绍: 1.登录的验证码:登录的验证码一定要在后台做验证,如果只是前台验证验证码后,后台未验证,可能会发生第一次验证验证码后,通过工具绕过验证码进行暴力破解: 2.拦截器:要对登录后的如个人信息操作的接口名称要使用/user或者/admin进行拦截,如用户未登录,将自动跳转至登录页面: 3.个人详细信息修改:用户的信息要存放在session

把discuzX 的用户登录信息添加到纯静态页面

把discuzX 的用户登录信息添加到纯静态页面 转:http://cq6.com/forum.php?mod=viewthread&tid=86560&extra=page%3D1&page=1 分享&收藏 花了几个小时的间,终于把discuzX 的用户登录信息加到纯静态页面了:演示地址:http://cq6.com/bm/ 源码:1. zx.php (存放在网站根目录) <?php require './source/class/class_core.php';

Linux--记录每个用户登录后的IP信息,还有其它的操作信息

#Linux--记录每个用户登录后的IP信息,还有其它的操作信息,追加 vim /etc/profile PS1="`whoami`@`hostname`:"'[$PWD]' (Linux系统提示符是用系统变量PS1来定义的) history (who -u am i 会显示系统中登陆进来的用户及登陆从哪个IP登陆进来的,这里后面过滤了就取值一个登陆进来的IP) USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 

一个简单的实现不同权限的用户登录后看到不同的菜单设计的数据库表清单

实现不同权限的用户登录后看到不同的菜单(菜单分两级),二级菜单显示内容根据一级菜单提供 一. menu 菜单表 id(主键), menu_name(菜单名), parent_menu_id(父菜单id), level(菜单级别:0,一级菜单,1,二级菜单--可以无限级) 二. role 角色表 id(主键), role_name(角色名) 三. role_menu 角色关联菜单表 id(主键), role_id(角色id), menu_id(菜单id) 四. user 用户表 id, user_

ecmall用户登录后自动退出解决方法

一部分用户反映登录后自动退出,经过跟踪观察,发现这些用户都是动态IP,而ecmall 中的 session 刚好是与 ip 有关的,故而找不到用户回话二失败,需重新登录. 怎么处理呢? 修改 includes/libraries/session.lib.php 方法,简单粗暴,去掉 ip 判断即可,哇卡卡 /** * 生成session验证串 * * @author wj * @param string $session_id * @return stirng */ function gen_s

nodejs在同一台服务器上部署并同时运行两个或以上服务端时,一个服务用户登录后会挤掉另一个用户的问题

问题描述:一台服务器,部署了两个或以上不同的Web服务,服务A的用户在登陆后,服务B的用户也登陆,此时服务A的用户在点击页面时,会返回登陆页面. 问题根源:浏览器保存的session相同,即cookie相同 解决办法: app.use(expressSession({ secret: 'keyboard cat', resave: false, saveUninitialized: true, name: 'aaa' //这里的name值得是cookie的name,默认cookie的name是: