session单点登录的实现

一、原理

自定义一个全局Map(单例类),将用户的loginPk作为key,sessionId作为value。当用户访问需用权限访问的页面时,比较当前session的id与原map中的sessionId是否相等:不相等,则已在另一地点登录。然后用cookie设置一标志位,表示是否单点登录。当跳出来时,再在页面判断cookie的值,然后显示信息。

二、代码

1、自定义类UserContext.java

2、登录成功后:

UserContext.getInstance().isLogined(session.getId(), String.valueOf(map.get("pk")));

3、过滤器拦截

boolean isMorePointLogined = false;
Object type = session.getAttribute("contactType");
String oldSessionId = null;
String newSessionId = session.getId();
if(type!=null){
    oldSessionId = UserContext.getInstance().getConcurrentHashMap().get(session.getAttribute("loginPk"));
    if(!newSessionId.equals(oldSessionId)){
        isMorePointLogined = true;
    }
}

4、过滤器跳转

// 非管理员身份不能进入后台界面
if(isMorePointLogined){
    // 设置多点登录的状态 ===> 在index.jsp页面提示
    Util.setCookie(httpServletResponse, "isMorePointLogined", Config.MorePointLoginSatus.TRUE);
}
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/index.jsp");

5、jsp页面

if(tool.getCookie("isMorePointLogined")==='<%=com.society.tool.Config.MorePointLoginSatus.TRUE%>'){
    steveAl('您的账号在异地登录!已被迫下线!', 3000);
    tool.delCookie("isMorePointLogined");
}
时间: 2024-08-09 14:44:52

session单点登录的实现的相关文章

SSO单点登录设计

关键字: 单点登录 SSO Session 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求.我将以我所遇到的应用环境以及在其中所经历的各个阶段与大家分享,若有不足,希望各位不吝赐教. 一.共享Session 共享Session可谓是实现单点登录最直接.最简单的方式.将用户认证信息保存于Session中,即以Session内存储的值为用户凭证,这在单个站点内

使用SQL Server保存Session状态,实现单点登录

在做一些应用网站时,我们可能会碰到这样一种情况:整个项目是由多个网站组成的,而我们要实现用户从一个站点登录后,跳转到其他网站不需要重复登录,即实现单点登录.目前实现单点登录的技术也有好几种,这篇文章描述一下如何使用ASP.NET2.0和SQL Server来实现单点登录.一般在用户登录成功后,我们需要把用户登录成功的信息保存在Session里,但是Session的值只能保存在用户当前访问的站点下,只要我们实现了Session的跨站共享,也就基本上实现了用户在一个站点登录成功后在其他站点不需要重复

JWT(JSON Web Token) 多网站的单点登录,放弃session

多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token)的方式. 参考链接: http://www.tuicool.com/articles/IRJnaa https://coderwall.com/p/8wrxfw/goodbye-php-sessions-hello-json-web-tokens 一.概念和定义 1.什么是jwt? Json web

如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)

如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO) Apache Session复制: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 使用Memcached来共享PHP Session: https://www.digitalocean.com/community/tutorials/how-to-share-php-sessions-on-multiple-memcached-se

java:sso(单点登录(single sign on),jsp文件动静态导入方式,session跨域)

1.jsp文件导入: 2.session跨域: 3.sso(单点登录(single sign on): sso Maven Webapp: LoginController.java: package com.sso.demo.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans

Web项目记录session实现单点登录

一哥们叫我写篇单点登录.我就记录一下我们项目中的单点登录实现吧,其实超级简单. 项目中通常都用的记录session来控制单点登录的.直接上代码吧 /** * sesssion列表 */ private static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>(); /** * *方法描述:单点登录 * @param session * @param userName */ public

TP、PHP同域不同子级域名共享Session、单点登录

TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置cookie使得同域不同子域共享SESSION 1. 通过在执行PHP的入口文件中设置如下代码: ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.mydomain.com'); ini_set('session

SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录

作者:Sans_ juejin.im/post/5d087d605188256de9779e64 一.说明 Shiro是一个安全框架,项目中主要用它做认证,授权,加密,以及用户的会话管理,虽然Shiro没有SpringSecurity功能更丰富,但是它轻量,简单,在项目中通常业务需求Shiro也都能胜任. 二.项目环境 MyBatis-Plus版本: 3.1.0 SpringBoot版本:2.1.5 JDK版本:1.8 Shiro版本:1.4 Shiro-redis插件版本:3.1.0 数据表(

redis缓存+session 实现单点登录

一.单点登录介绍 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 同域下:单点登录是巧用了Cookie顶域的特性. 不同域下:如果是不同域呢?不同域之间Cookie是不共享的,怎么办? 这个是使用CAS流程,单点登录的标准流程. 相关详情:https://yq.aliyun.com/articles/636281    https://blog.csdn.n