zoukankan      html  css  js  c++  java
  • 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

      

      配置完成。

       会话验证调度器

      

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

    缓存

      CacheManagerAware接口

      Shiro内部相应的组件(DefaultSecurityManager) 会自动检测相应的对象(如Realm) 是否实现了CacheManagerAware并自动注入相应的CacheManager。

      Realm缓存

      Shiro 提供了 CachingRealm,其实实现了CacheManagerAware 接口,提供了缓存的一些基础实现;

      AuthenticatingRealm 及 AuthorizingRealm也分别提供了对 AuthenticationInfo 和  AuthorizationInfo信息的缓存。

      Session缓存

      

  • 相关阅读:
    Auto.js脚本程序控制手机APP
    jemter运行报错,{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.13","title":"Unsupported Media Type","status":415,"traceId":"00-d0eeccb9ae68f44798713724724a4353-4623dc713e44b34c-00"
    解决ModuleNotFoundError: No module named 'pip'问题
    'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    vue配置
    创建分支,提交代码
    Navicat 12.1安装与破解之Navicat Keygen Patch使用方法
    vue--04
    Maven 打包程序如何使用可在外部修改的配置文件
    Vue 2.6 中部分引入 TypeScript 的方法
  • 原文地址:https://www.cnblogs.com/wq3435/p/6272139.html
Copyright © 2011-2022 走看看