Shiro之会话管理&缓存管理

本文详细介绍了Shiro的会话管理和缓存管理,包括sessionManager会话管理器、SessionListener会话监听器的使用,以及如何利用Ehcache提升性能,通过配置文件与Shiro、Spring进行整合,实现数据缓存。
摘要由CSDN通过智能技术生成

目录

一、会话管理

1、sessionManger会话管理器

2、SessionListener会话监听器

 3、案例

3.1 监听器

3.2 applicationContext-shiro.xml配置

二、缓存管理 

1.为什么要使用缓存 提升性能

2、什么是Ehcache 

3、Ehcache 框架的特点

4、Ehcache入门

核心接口

缓存策略:

核心配置文件: 具体可看注释

5、利用Ehcache框架实现缓存管理

5.1、导入pom依赖

5.2导入框架配置文件

5. 3、整合shiro框架与Ehcache框架

5.4  整合Spring和Ehcache框架 配置文件

5.5、开启Shiro的授权或者认证数据缓存  在自定义Realm配置中开启并设置授权或者认证数据缓存


一、会话管理

Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。
  
  所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。

利用俩个组件:sessionListener会话监听器和sessionManger会话管理器实现Shiro会话管理

 

1、sessionManger会话管理器

 会话管理器管理着应用中所有 Subject 的会话的创建、维护、删除、失效、验证等工作。是Shiro 的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了SessionsSecurityManager实现直接把会话管理委托给相应的SessionManager

 1)DefaultSessionManager:使用的默认实现,用于JavaSE环境
  2)ServletContainerSessionManager:使用的默认实现,用于Web环境,其直接使用Servlet容器的会话
  3)DefaultWebSessionManager:用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理

 以及在配置文件中sessionManger里所包含的属性

2、SessionListener会话监听器

 SessionListener会话监听器用于监听会话创建、过期及停止事件。

 实现方式:
  1)实现SessionListener,必须实现所有方法
  2)继承SessionListenerAdapter,重写指定方法

 相关API:
  1)onStart(Session session):监听会话创建事件
  2)onStop(Session session):监听会话销毁事件
  3)onExpiration(Session session):监听会话过期事件

 3、案例

步骤:

3.1、自定义一个监听器类并实现SessionListener接口

3.2、在Spring与shiro的整合配置文件中配置相关文件

3.1 监听器

package com.zjy.shiro;

import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListener;

/**
 * @author zjy
 * @site Bi8boYin
 * @company xxx公司
 * @create  2022-08-27 11:34
 */
public class ShiroSessionListener implements SessionListener {
    @Override
    public void onStart(Session session) {
        System.out.println("ShiroSessionListener.onstart..."+session.getId());
    }

    @Override
    public void onStop(Session session) {
        System.out.println("ShiroSessionListener.onStop..."+session.getId());
    }

    @Override
    public void onExpiration(Session session) {
        System.out.println("ShiroSessionListener.onExpiration..."+session.getId());
    }
}

3.2 applicationContext-shiro.xml配置

    <!--注册安全管理器-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="shiroRealm" />
        <property name="sessionManager" ref="sessionManager"></property>
    </bean>

    <!-- Session ID 生成器 -->
    <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator">
    </bean>

    <!--sessionDao自定义会话管理,针对Session会话进行CRUD操作-->
    <bean id="customSessionDao" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO">
        <property name="sessionIdGenerator" ref="sessionIdGenerator"/>
    </bean>

    <!--会话监听器-->
    <bean id="shiroSessionListener" class="com.zjy.shiro.ShiroSessionListener"/>

    <!--会话cookie模板-->
    <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <!--设置cookie的name-->
        <constructor-arg value="shiro.session"/>
        <!--设置cookie有效时间-->
        <property name="maxAge" value="-1"/>
        <!--设置httpOnly-->
        <property name="httpOnly" value="true"/>
    </bean>

    <!--SessionManager会话管理器-->
    <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
        <!--设置session会话过期时间 毫秒 2分钟=120000-->
        <propert
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值