首页 > 代码库 > Shiro-Session

Shiro-Session

  • 概述

  Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web 的透明支持、SSO 单点登录的支持等特性。

 

  • 会话相关的API

  技术分享

  技术分享

 

  • 会话监听器

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

  技术分享

 

   添加Session,这里添加的时候使用的是 HttpSession

@RequestMapping("/shiroMethod")
    public String shiroServiceMethod(HttpSession session){
        session.setAttribute("key", "value12345");
        
        shiroService.shiroServiceMethod();
        return "redirect:/list.jsp";
    }

 

   在Service层中获取Session,注意这里使用的是Shiro提供的Session

  

package com.java.shiro.services;

import java.util.Date;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.apache.shiro.session.Session;

public class ShiroService {

    @RequiresRoles({ "admin" })
    public void shiroServiceMethod() {

        Session session = SecurityUtils.getSubject().getSession();
        System.out.println("session: " + session.getAttribute("key"));

        System.out.println("Test ShiroServiceMethod, time: " + new Date());
    }

}

 

 

 这样的好处是,即便是在Service层也能访问到Session的数据,开发的时候是很方便的,这是Shiro提供的Session一个很重要的应用

 

SessionDao

  可以把Session存到数据库中,对session进行增删改查操作。

技术分享

 

在开发中推荐 继承 EnterpreiseCacheSessionDAO

 

  思路:

  技术分享

 

  配置示例:

  技术分享

 

  技术分享

 

我们把配置好的sessionManager 作为SecurityManager的属性进行配置。

  数据表:

create table sessions (
id varchar(200),
session varchar(2000),
constraint pk_sessionsprimary key(id)
) charset=utf8 ENGINE=InnoDB;

 

   Session Dao

  技术分享

  技术分享

  在进行Session操作时,我们需要将这个Session对象进行序列化的操作

  SerializableUtils

  技术分享

  配置完成。

   会话验证调度器

  技术分享

 

  实际上会在底层开一个线程,验证会话是否过期了,使用会话验证会影响性能,开发是用的不多。

 

Shiro-Session