`
确实比较男
  • 浏览: 115007 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

会话管理Session Management

阅读更多

手赚入口:http://szjx.top

 

HttpSessionEventPublisher

实现了HttpSessionListener接口,监听session的创建和销毁事件,通过ApplicationContext发布对应的事件HttpSessionCreatedEvent  HttpSessionDestroyedEvent
//监听session创建事件
public void sessionCreated(HttpSessionEvent event) {
    HttpSessionCreatedEvent e = new HttpSessionCreatedEvent(event.getSession());
    //发布事件
    getContext(event.getSession().getServletContext()).publishEvent(e);
}

//监听session销毁事件
public void sessionDestroyed(HttpSessionEvent event) {
   HttpSessionDestroyedEvent e = new HttpSessionDestroyedEvent(event.getSession());
   //发布事件
   getContext(event.getSession().getServletContext()).publishEvent(e);
}

SessionRegistry , SessionInformation

SessionInformation :记录认证用户的session信息 。

lastRequest:最后一次访问次数

principal:认证用户信息

sessionId:session的id

expired:是否过期

SessionRegistry :

 

    保存了所有认证成功后用户的SessionInformation信息,每次用户访问服务器的会从sessionRegistry中查询出当前用户的session信息 ,判断是否过期以及刷新最后一次方法时间,默认的实现类SessionRegistryImpl,监听了session的销毁事件,若销毁,那么删除掉session信息,有两个属性:

/** <principal:Object,SessionIdSet>  以认证用户对象做key,多个sessionId 为value 。一个用户可以对应多个不同的session,表示同一个帐号可以同时在不同的浏览器上登录,可以配置最大允许同时登录的数*/
private final ConcurrentMap<Object,Set<String>> principals = new ConcurrentHashMap<Object,Set<String>>();
/** <sessionId:Object,SessionInformation> 以sessionid为key SessionInformation为value */
private final Map<String, SessionInformation> sessionIds = new ConcurrentHashMap<String, SessionInformation>();

 

SessionAuthenticationStrategy

void onAuthentication(Authentication authentication, HttpServletRequest request, HttpServletResponse response)  throws SessionAuthenticationException;

 

有多个实现类:

ChangeSessionIdAuthenticationStrategy:

调用HttpServletRequest的changeSessionId方法改变sessionid

SessionFixationProtectionStrategy:

首先让原来的session过期,然后创建一个新的session,把原来session的属性拷贝到新的session中

http://xpenxpen.iteye.com/blog/1664075

RegisterSessionAuthenticationStrategy:

用户认证成功后sessionRegistry调用registerNewSession,保存用户的信息和session

ConcurrentSessionControlAuthenticationStrategy:

允许用户同时在线数,有一个maximumSessions属性,默认是1。通过sessionRegistry判断用户数是否已经超过了最大允许数,若超过了,那么就让最近一个的session过期(让上一个用户强制下线)

 

CompositeSessionAuthenticationStrategy:组合使用多个SessionAuthenticationStrategy

 

 

实现控制同时在线用户数

 1.    在web.xml中添加listener

 

 

<listener>
  <listener-class>
     org.springframework.security.web.session.HttpSessionEventPublisher
  </listener-class>
</listener>

 2.  在security.xml中添加代码:

 

<security:http>
    <security:intercept-url pattern="/**" access="ROLE_USER"/>
    <security:form-login/>
    <security:logout logout-url="/logout"/>
    <security:session-management>
        <security:concurrency-control max-sessions="1"/>
    </security:session-management>
</security:http>

 默认创建的SessionAuthenticationStrategy是组合CompositeSessionAuthenticationStrategy:设置的SessionAuthenticationStrategy有:RegisterSessionAuthenticationStrategy  ConcurrentSessionControlAuthenticationStrategy  SessionFixationProtectionStrategy

 

 

 

 小忆智库:http://blog.xiaoyizhiku.cn/

 

 

0
0
分享到:
评论

相关推荐

    spring security 3.x session-management 会话管理失效

    - 在Spring Security的XML配置文件中,`&lt;http&gt;`元素下的`&lt;session-management&gt;`用于配置会话管理。例如,可以添加`&lt;concurrency-control&gt;`子元素来设置并发会话策略。 - `&lt;session-management&gt;`还可以配置`...

    webgoat——Session Management Flaws会话管理缺陷

    在WebGoat的"Session Management Flaws"练习中,展示了如何通过分析和篡改WEAKID参数(一个代表Session ID的变量)来尝试模拟会话劫持。攻击者发现WEAKID的生成规律,尝试通过自动化工具(如Sequencer)模拟这个过程...

    DFC_Session_Management_Whitepape

    **Session Management** 在DFC编程中扮演着至关重要的角色,主要负责管理与Documentum服务器之间的会话。本文档旨在为DFC初学者提供关于如何高效地管理和利用这些会话的指南。 #### 二、DFC Session Management的...

    5G发展情况及关键技术-核心网.pdf

    * 会话管理Session Management Function (SMF) * 用户面功能User plane Function (UPF) * 能力开放:Network Exposure Function (NEF) * 功能注册:NF Repository Function (NRF) 4. 基于服务的控制面架构(SBA) ...

    Angular-SessionManagement

    Angular 会话管理安装###Bower 安装 SessionManagement 模块的最简单方法是将 bower 包包含到您的解决方案中bower install symanto-angular-sessionmanagement --save 之后,您只需要将模块和所需的模块添加到您的 ...

    Shiro 身份验证、授权、密码和会话管理

    4. **会话管理(Session Management)**: Shiro 不仅可以管理应用程序内部的会话,还可以跨服务器进行分布式会话管理。这在开发分布式 Web 应用时尤其有用,如在集群环境中,可以确保用户会话的一致性。Shiro 提供...

    5G核心网NEF服务标准规范中英文翻译(29508-g00 Session Management Event Exposure Service.docx)

    根据给定文件的信息,我们可以提炼出关于5G核心网NEF服务标准规范中与会话管理事件曝光服务相关的知识点。 ### 一、文档背景及概述 #### 1.1 文档基本信息 - **文档编号**:3GPPTS29.508V16.0.0(2019-06) - **...

    29502-中文版-5G系统:会话管理服务g10.pdf

    从文档的【部分内容】来看,技术规范详细地介绍了5G会话管理服务(Session Management, SM)相关的服务、操作和流程,其中包括了用户平面连接的激活和取消激活,PDU会话的建立、更新、释放,以及移动性管理等核心...

    Swift 实现的简单的 Session 管理库.zip

    3. **会话管理(Session Management)**: 会话管理是指在应用程序中跟踪用户状态和行为的过程,通常包括登录状态、用户偏好和数据缓存等。简单Session管理库的目标就是简化这一过程,提供一个封装好的接口来创建、...

    Session-Management:会话管理

    诊所会议管理 构建设置 # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build # build for production and view ...

    FlaskLogin插件为Flask提供用户会话管理。它处理登录、注销和长时间记住用户会话的常见任务。

    Flask-Login provides user session management for Flask. It handles the common tasks of logging in, logging out, and remembering your users' sessions over extended periods of time. Flask-Login is not ...

    3GPP TS 23.501 V16.1.0 5.6 Session Management -中英文对照版V1.pdf

    在UE发起PDU会话建立请求时,如果在NAS(Non-Access Stratum)消息中没有提供DNN,AMF(Access and Mobility Management Function)将根据UE的签约信息来确定PDU会话的DNN。如果签约信息中存在默认DNN,AMF会选择这...

    PHP-Session-Management:使用会话管理类维护安全会话

    会话管理 该类用于维护和管理网站的会话。 通过本课程,您可以: 开始会话。 重新生成会话 ID。 检查会话是否有效。 关闭会话。 在这个类中,可以使用用户的指纹来验证会话。 指纹包括安全词、IP 地址、浏览器...

    session失效

    在Web应用开发中,会话管理(Session Management)是一项基本且重要的功能。它用于跟踪用户的会话状态,确保用户在与服务器交互过程中保持登录等状态信息的一致性。Session作为会话管理的一种实现方式,在现代Web...

    Session Management for Emacs-开源

    "Session Management for Emacs"是一个开源项目,旨在帮助用户轻松地管理和恢复Emacs的工作会话。这个插件的核心功能是记录并恢复编辑器的多个方面,包括打开的文件、缓冲区、窗口布局,甚至用户的输入历史记录。...

    shiro-redis-session-master.zip

    Shiro框架的核心组件包括Subject(主体)、Realms(领域)、Cryptography(加密)和Session Management(会话管理)。Subject代表当前操作的用户,而Realms是Shiro与应用程序安全数据交互的桥梁,负责从数据源获取...

    适配与Tomcat7、8、9的redis session共享jar包

    在IT行业中,尤其是在Web应用开发领域,服务器集群和会话管理是常见的需求。"适配与Tomcat7、8、9的redis session共享jar包"指的是一个专为Apache Tomcat服务器设计的解决方案,用于在多台Tomcat服务器之间共享用户...

    GPRS会话管理信令流程

    在GPRS点对点数据业务中,SM(Session Management)主要包括PDP上下文的激活、解除和修改。对于匿名接入,也有相应的PDP上下文激活和解除流程。 PDP上下文的状态反映了其是否可用于数据传输。未激活状态意味着没有...

Global site tag (gtag.js) - Google Analytics