Shiro配置类中的各个配置项浅谈

news2024/11/13 20:22:45
背景:

上文中在落地实践时,对Shiro进行了相关的配置,并未对其含义作用进行详细学习,本章将进一步详解其作用含义。

Shiro配置类中的各个配置项的作用:

@Bean

public SecurityManager securityManager() {

    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();

    securityManager.setRealm(myRealm());

    securityManager.setSessionManager(defaultWebSessionManager());

    securityManager.setCacheManager(ehCacheManager());

    securityManager.setRememberMeManager(rememberMeManager());

    return securityManager;

}

  • securityManager() 方法创建一个 DefaultWebSecurityManager 对象,并设置了相关的组件。DefaultWebSecurityManager 是 Shiro 的 SecurityManager 实现类,用于管理所有的 Subject(用户)。
  • setRealm(myRealm()) 设置了自定义的 Realm 对象,用于处理认证和授权逻辑。
  • setSessionManager(defaultWebSessionManager()) 设置了默认的 SessionManager 对象,用于管理用户的会话信息。
  • setCacheManager(ehCacheManager()) 设置了 EhCache 缓存管理器,用于缓存用户信息和权限信息。
  • setRememberMeManager(rememberMeManager()) 设置了 RememberMeManager,用于实现 "记住我" 功能。

public class MyShiroRealm extends AuthorizingRealm {

    @Resource

    private UserInfoService userInfoService;

    @Override

    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {

        UserInfo userInfo = (UserInfo) principalCollection.getPrimaryPrincipal();

        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();

        for (SysRole role : userInfo.getRoles()) {

            simpleAuthorizationInfo.addRole(role.getName());

            for (SysPermission permission : role.getPermissions()) {

                simpleAuthorizationInfo.addStringPermission(permission.getName());

            }

        }

        return simpleAuthorizationInfo;

    }

    @Override

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {

        // 获取用户名

        String username = (String) authenticationToken.getPrincipal();

        // 根据username从数据库中查找 UserInfo 对象

        UserInfo userInfo = userInfoService.findByUsername(username);

        if (null == userInfo) {

            return null;

        }

        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(

                userInfo, // 用户名

                userInfo.getPassword(), // 密码

                ByteSource.Util.bytes(userInfo.getSalt()), // salt=username+salt

                getName() // realm name

        );

        return simpleAuthenticationInfo;

    }

}

MyShiroRealm 是一个自定义的 Realm 对象继承 AuthorizingRealm ,并实现其两个方法,在这两个方法中进行认证和授权相关逻辑的编写。以便 login 执行的调用。<br><br><br>

1

2

3

4

5

6

7

@Bean

public DefaultWebSessionManager defaultWebSessionManager() {

    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();

    sessionManager.setGlobalSessionTimeout(1800000);

    sessionManager.setSessionIdCookie(sessionIdCookie());

    return sessionManager;

}

  • defaultWebSessionManager() 方法创建一个 DefaultWebSessionManager 对象,用于管理用户的会话信息。
  • setGlobalSessionTimeout(1800000) 设置全局会话超时时间为30分钟。
  • setSessionIdCookie(sessionIdCookie()) 设置会话 ID 的 Cookie。

1

2

3

4

5

6

7

@Bean

public SimpleCookie sessionIdCookie() {

    SimpleCookie cookie = new SimpleCookie("sid");

    cookie.setHttpOnly(true);

    cookie.setMaxAge(-1);

    return cookie;

}

  • sessionIdCookie() 方法创建一个 SimpleCookie 对象,用于设置会话 ID 的 Cookie。
  • setHttpOnly(true) 表示该 Cookie 只能通过 HTTP 协议获取,不能通过 JavaScript 等脚本语言获取,有助于防止跨站脚本攻击(XSS)。
  • setMaxAge(-1) 表示该 Cookie 的有效期为浏览器会话结束时失效,即关闭浏览器后会话结束。

1

2

3

4

5

6

@Bean

public EhCacheManager ehCacheManager() {

    EhCacheManager cacheManager = new EhCacheManager();

    cacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");

    return cacheManager;

}

  • ehCacheManager() 方法创建一个 EhCacheManager 对象,用于缓存 Shiro 的数据。
  • setCacheManagerConfigFile("classpath:ehcache.xml") 指定 EhCache 的配置文件位置。

1

2

3

4

5

6

7

@Bean

public RememberMeManager rememberMeManager() {

    CookieRememberMeManager rememberMeManager = new CookieRememberMeManager();

    rememberMeManager.setCookie(rememberMeCookie());

    rememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));

    return rememberMeManager;

}

  • rememberMeManager() 方法创建一个 RememberMeManager 对象,用于实现 "记住我" 功能。
  • setCookie(rememberMeCookie()) 设置 RememberMe 的 Cookie。
  • setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag==")) 设置加密密钥,用于加密 "记住我" 的信息。

1

2

3

4

5

6

7

@Bean

public SimpleCookie rememberMeCookie() {

    SimpleCookie cookie = new SimpleCookie("rememberMe");

    cookie.setHttpOnly(true);

    cookie.setMaxAge(2592000);  // 30 days

    return cookie;

}

  • rememberMeCookie() 方法创建一个 SimpleCookie 对象,用于设置 RememberMe 的 Cookie。
  • setMaxAge(2592000) 设置 RememberMe 的 Cookie 有效期为 30 天。
小结:

  通过对 Shiro 配置类中各个配置项的详细解释,可以更好地理解每个配置项的作用和含义,以及为什么要进行这些配置。这些配置项的设置可以根据具体的需求进行调整,以满足应用程序的安全性和功能性要求

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1596850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识集合框架

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1f…

分享2024 golang学习路线

写在前面 Go语言&#xff08;也称为Golang&#xff09;是Google开发的一种静态强类型、编译型语言&#xff0c;它具有简洁、快速、安全、并发等特点&#xff0c;尤其适合构建大型软件、微服务架构和云平台服务。Go的学习曲线相对平缓&#xff0c;社区活跃&#xff0c;是现代编…

吴恩达llama课程笔记:第四课提示词技术

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

在Windows上配置VS Code GO语言开发环境

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

上岸必看:C++ 24校招/25实习求职指南

校招和实习是应届生步入职场的重要途径&#xff0c;是职业生涯的起点。 通过实习和校招进入的岗位&#xff0c;C应届生能够更好地了解行业现状&#xff0c;明确自己的职业兴趣和发展方向。有的时候&#xff0c;实际工作中的体验甚至会引导你重新考虑和规划自己的职业道路。 并…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题

当在Mac上下载的软件显示文件已损坏时&#xff0c;这可能是因为多种原因导致的&#xff0c;包括网络问题、下载中断、软件未完整下载、文件传输错误等。解决这个问题需要采取一些步骤来排除可能的原因&#xff0c;并尝试修复文件。下面将详细介绍一些常见的解决方法&#xff1a…

算法课程笔记——排序

Bool返回真假 为何用const不用define 1.保护被修饰的东西 2.通常不分配存储空间&#xff0c; 效率高 匿名函数只在一处用&#xff0c;其他处用不到 不写&就是拷贝 u相等就u&#xff0c;不等就v 一个字符是空格一个是换行&#xff0c;后面是取下标i那就是1&#xff08;true&…

利用vite创建vue项目

创建vue项目步骤 打开HBuilder X工具&#xff0c;创建空白项目 进入终端(鼠标点击文件进行选择&#xff0c;然后终端) 利用vite脚手架创建项目 &#xff08;前提要将HBuilder X工具属性设为管理员运行状态&#xff08;属性》兼容》管理员身份运行此程序&#xff09; npm …

CentOS如何使用Docker部署Plik服务并实现公网访问本地设备上传下载文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

pnpm 使用 workspace 报错 ERR_INVALID_THIS

有时候真的感觉如果有一个老师指路&#xff0c;那么遇到的坑真的会少很多。 错误示例&#xff1a; GET https://registry.npmjs.org/rollup%2Fplugin-typescript error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.原因是什么&#xff1f;原因就是 pnpm 的…

MySQL表空间管理与优化(8/16)

表空间管理和优化 innodb_file_per_table参数&#xff08;此参数在分区表章节中还会出现&#xff09;&#xff1a; 这个参数决定了InnoDB表数据的存储方式。当参数设置为ON时&#xff0c;每个InnoDB表的数据会单独存储在一个以.ibd为后缀的文件中&#xff0c;这有利于管理和回收…

python数据结构与算法之线性表

1、线性表 是一种由n个元素&#xff08;n> 0 &#xff09;数据元素组成的有限序列&#xff0c;所包含的元素数量通常被称为表的长度 n 0 的表被称为空表&#xff0c;线性表的数据元素可以单一也可以复杂&#xff0c;可以是整数&#xff0c;字符串&#xff0c;也可以是由几…

活动预告|NineData 创始人CEO叶正盛将参加QCon全球软件开发大会,共话AI大模型技术在数据库DevOps的实践

4月13日下午&#xff0c;NineData创始人&CEO叶正盛即将参加InfoQ中国主办的『QCon全球软件开发大会北京站』的技术大会。在本次技术峰会上&#xff0c;叶正盛将以《AI大模型技术在数据库DevOps的实践》为主题&#xff0c;深入剖析AI大模型技术在数据库DevOps领域的最新进展…

Zookeeper的集群搭建和ZAB协议详解

Zookeeper的集群搭建 1&#xff09;zk集群中的角色 Zookeeper集群中的节点有三个角色&#xff1a; Leader&#xff1a;处理集群的所有事务请求&#xff0c;集群中只有一个LeaderFollwoer&#xff1a;只能处理读请求&#xff0c;参与Leader选举Observer&#xff1a;只能处理读…

软考数据库---3.关系数据库

3.1 名词 属性分类 数据库实体属性分类主要包括以下几个方面&#xff1a; 标识属性 (Key Attribute / Identifier): 这些属性是用来唯一识别实体实例的关键属性&#xff0c;也称为主键&#xff08;Primary Key&#xff09;。在数据库表中&#xff0c;每个实体的实例&#xff0…

【GD32】GP2Y1014AU粉尘传感器

2.42 GP2Y1014AU粉尘传感器 2.42.1 模块来源 采购链接&#xff1a; GP2Y1014AU粉尘传感器模块 PM2.5灰尘传感器代替GP2Y1010AU0F 2.42.2 规格参数 工作电压&#xff1a;5-7V 消耗电流&#xff1a;最大20mA 最小粒子检出值&#xff1a;0.8微米 灵敏度&#xff1a;0.5V(0.1mg…

锁策略总结

锁策略 悲观锁和乐观锁 乐观锁和悲观锁不是具体类型的锁而是指两种不同的对待加锁的态度&#xff0c;这两个锁面对锁冲突的态度是相反的。 乐观锁&#xff1a;认为不存在很多的并发操作&#xff0c;因此不需要加锁。悲观锁&#xff1a;认为存在很多并发操作&#xff0c;因此需…

c++编程(4)——类与对象(2)构造函数、析构函数

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 文章目录 构造函数默认构造函数析构函数默认析构函数 构造函数 以一个日期类为例。 class Data { private:int _year;int _month;int _day; };这个类实例化出来的对象内的值都是编译器默认初始化的随机值。 Data d1…

私域流量变现干货:轻松盘活,高效增长!

你知道如何增长私域流量并将这些流量转化为实际收益&#xff0c;让我们的品牌价值最大化吗&#xff1f; 今天&#xff0c;就分享几点干货&#xff0c;帮助大家盘活私域流量&#xff0c;实现高效增长&#xff01; 1、精准定位和用户画像 首先&#xff0c;了解您的私域流量源于…

位像素谈海外仓库存管理方法:WMS对效率提升到底有没有用?

对海外仓来说&#xff0c;最重要的事情就是把库存管理做清楚。因为海外仓的本质还是仓储&#xff0c;如果连仓储数据都出现错误&#xff0c;那不管是对客户还是对终端消费者来说&#xff0c;都会造成巨大的影响。 今天我们就来聊一下&#xff0c;在电商飞速发展的今天&#xf…