【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+Shiro 缓存使用

news/2024/12/3 8:05:57/文章来源:https://www.cnblogs.com/o-O-oO/p/18583224

我们看一下下面这个问题, 在MyRealm中增加输出语句:

@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {String username = (String) principals.iterator().next(); // 得到已经登录成功的用户名, 实际上获取到的内容是 doGetAuthenticationInfo 方法中 new SimpleAuthenticationInfo(用户名, 用户密码, 当前Realm名称) 中的第一个参数Set<String> roles = roleMapper.queryRoleByUserName(username); // 通过用户名得到角色名称Set<String> permissions = permissionMapper.queryPermissionByUserName(username); // 通过用户名得到权限信息System.out.println("我在授权...."); // 增加该语句SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();info.setRoles(roles); // 将数据库查询出来的信息封装到 AuthorizationInfo 中info.setStringPermissions(permissions);return info;
}

那么我们登录随意一个用户进行测试:

登录lisi:我在授权.... (显示12次)

其原因则是我们/resource/templates/index.html中使用了<shiro:hasPermission>进行判断, 每使用一次<shiro:hasPermission>就会调用一次MyRealm::doGetAuthorizationInfo方法.

下面在pom.xml文件中进行引入缓存:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId>
</dependency>
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-cache</artifactId><version>1.4.1</version>
</dependency>
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-ehcache</artifactId><version>1.4.1</version>
</dependency>

当然了, 准备了ehcache就需要定义/resources/ehcache.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache><diskStore path="java.io.tmpdir/Tmp_EhCache"/><defaultCache eternal="false" maxElementsInMemory="10000" overflowToDisk="false" diskPersistent="false"timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU"/>
</ehcache>

随后我们在ShiroAutoConfiguration中进行配置:

// ... 其他代码
@Bean
public EhCacheManager ehCacheCacheManager() {EhCacheManager ehCacheManager = new EhCacheManager();ehCacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");return ehCacheManager;
}@Bean
public SecurityManager securityManager(MyRealm myRealm, EhCacheManager ehCacheManager) { // 增加一个 EhCacheManager 参数DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(myRealm);securityManager.setCacheManager(ehCacheManager); // 配置到 Realm 中去return securityManager;
}

修改完毕后, 我们再次授权就不会每次都访问数据库了.

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+授权

用户登陆成功之后, 要进行响应的操作就需要有对应的权限; 在进行操作之前对权限进行检查 - 授权. 权限控制通常有两类做法: 不同身份的用户登录,不同的操作菜单(没有权限的菜单不显示) 对所有用户显示所有菜单,当用户点击菜单以后再验证当前用户是否有此权限,如果没有则提…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+Shiro 加密

加密的过程如下:研究这部分内容, 我们需要将数据库中Password值都改为MD5处理后的值, 过程如下: mysql> SELECT * FROM tb_users; +---------+----------+----------+---------------+ | user_id | username | password | password_salt | +---------+----------+----------…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+退出登录

在我们的ShiroAutoConfiguration::ShiroFilterFactoryBean中, 我们增加如下代码: @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilte…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+自定义 Realm

在真正的项目中, 我们不会使用Shiro提供的JdbcRealm, 而是使用自定义Realm, 配合我们的MyBatis, 以及自定义表结构进行联合使用.表结构定义 那么下面我们来定义这些表:-- 用户信息表 CREATE TABLE `tb_users`(user_id int unsigned primary key auto_increment,username varcha…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+IniRealm

IniRealm 如果我们想在SpringBoot中进行使用Shiro, 那么我们肯定是需要围绕如下环节进行研究. 创建 pom.xml: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3&l…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+JdbcRealm

JdbcRealm 其中JdbcRealm需要创建如下表结构: CREATE TABLE `users`(id int primary key auto_increment,username varchar(60) not null unique,password varchar(60) not null,password_salt varchar(20) ); -- 创建五个用户如下 INSERT INTO `users`(username, password) VA…

【Java漏洞】Shiro 漏洞:基于 Java SE 基本使用

在pom.xml文件中进行引入依赖: <dependencies><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.4.1</version></dependency> </dependencies>因为本次的Realm从文…

【Java漏洞】Shiro 漏洞:Shiro 核心组件

Shiro 的运行流程为如下:这里 Subject 的创建是由 SecurityUtils 进行创建的, 后面我们代码会给出案例, 官方给出的图如下:

【Java漏洞】Shiro 漏洞:权限管理

Shiro 的漏洞已爆出很多年, 我们只关心到了它如何触发, 有时并没有想过这个框架是干嘛的, 甚至没有分析过该框架的底层运行逻辑, 那么本篇文章, 让大家从开发者的角度, 来观察。 概念为了实现不同身份登录系统, 出现的功能模块不一样。这个需求叫做权限管理。 学生登录后, 出现…

读数据保护:工作负载的可恢复性02收集需求

收集需求1. 要点 1.1. 数据保护并不是IT里面最出彩的部分1.1.1. 让这个组织知道自己可能遭受哪些风险1.1.2. 与该组织内具有核心竞争力的IT产品通常没有什么联系1.2. 做数据保护所需的资源通常很昂贵,而且这些资源并不会体现在该组织卖给客户的最终产品里1.2.1. 没人会情愿为这…

怎么去除img之间存在的间隔缝隙?

在前端开发中,img 元素之间出现间隔缝隙通常是由几个原因造成的,以下列出常见原因及解决方法: 1. 默认的 inline-block 行为:原因: img 元素默认是 inline-block 元素。inline-block 元素会受到空格和换行符的影响,这些空格和换行符会被渲染成一个空格,从而导致元素之间出…

window10安装子系统wsl2

启用linux子系统 打开控制面板 点击程序点击 启用或关闭 Windows 功能勾选 适用于 Linux 的 Windows 子系统 然后点击确定[Haima的博客] http://www.cnblogs.com/haima/