shiro

Spring Security 中如何让上级拥有下级的所有权限?

为君一笑 提交于 2020-10-05 06:18:29
本文基于当前 Spring Security 5.3.4 来分析,为什么要强调最新版呢?因为在在 5.0.11 版中,角色继承配置和现在不一样。旧版的方案我们现在不讨论了,直接来看当前最新版是怎么处理的。 1.角色继承案例 我们先来一个简单的权限案例。 创建一个 Spring Boot 项目,添加 Spring Security 依赖,并创建两个测试用户,如下: @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("javaboy") .password("{noop}123").roles("admin") .and() .withUser("江南一点雨") .password("{noop}123") .roles("user"); } 然后准备三个测试接口,如下: @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "hello"; } @GetMapping("/admin/hello") public String

springBoot增加聚合项目

断了今生、忘了曾经 提交于 2020-10-04 04:03:34
1、新建父级maven项目springboot,删除多余部分,保留pom.xml文件,增加文件内容添加依赖jar包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cn.zmc</groupId> <artifactId>springboot</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>common</module> <module>auth</module> </modules> <packaging>pom</packaging> <properties> <java.version>1.8</java.version> <junit.version>4.10<

权限管理框架之Shiro 的使用和原理(一)

大憨熊 提交于 2020-10-02 02:57:09
Apache Shiro 做用户权限管理非常流行的一款框架:下面先进入实战 1、引入jar: <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.0</version> </dependency> 2、一种登录的思路,核心实例代码: @Override public void doLogin(String userName, String clientId){ logger.info("----doLogin---start--进行shiro登录userName={},clientId={}",userName,clientId); String sessionId = redisUtil.getString(Constant.SESSION_ID_USER_PREFIX+clientId); if(null != sessionId && null != redisTemplate.opsForValue().get(sessionId)){ Session session = (Session) redisTemplate.opsForValue().get(sessionId); if(null !=session){

xmall学习笔记——登录权限校验

坚强是说给别人听的谎言 提交于 2020-09-30 10:43:01
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、xmall中如何使用shiro 二、shiro校验 1.shiro配置 2.登录权限校验 总结 前言 这里我说一说我最近的学习感受。在接触开源项目的时候,我已经储备了一些基础知识,知道了一些框架怎么使用。这个时候看代码,你会有很多疑问,比如执行顺序,为什么这么配置,这个时候你会不断的ctrl+b 一层一层进去看,越看你就越开始怀疑自己,我真的会了吗?我这里可能不是要叫你一定要弄到它的原理什么的,想你传递学习的负面信息。我觉得对于一个新手而言,学习框架的时候应该有清楚的认识,框架肯定是被封装过的,其次你学框架干嘛?是会用了,了解了就可以,那么一开始就没必要深入研究。 一、xmall中如何使用shiro 上面一篇我看了xmall-sso 单点登录功能,我们发现这里面的代码很简单,就是去数据库查询然后校验,生成token放到redis中。还写了一个根据token获取用户数据的方法。那么在服务调用的时候是不是每次都需要自己手动校验登录状态和权限呢?不管每个请求都自己手动写校验还是用AOP实现校验。都需要我们自己实现。一个是增加了项目的复杂度和难度,也容易出错。 我们可以看到xmall-front-web 中没有使用,但是在xmall-manager-web中用到了shiro

集群部署的落地实现之spring shiro redis 架构 第四篇 shiro session ShiroSessionManager 优化 频繁访问redis

点点圈 提交于 2020-08-20 08:25:06
本篇文章主要解决的问题是shiro session使用redis缓存存储后,由于shiro session的设计特点,导致浏览器端请求会非常频繁访问redis,这样就造成资源的浪费,以及系统性能的下降。主要体现在来 自浏览器的一个请求需要访问这个dao的update方法二十多次。这个是shiro框架本身session设计的原因造成的,每次请求过来都需要更新session内部的时间戳。这个需要对浏览器的请求做针对性的优化,也就是把session存放在request请求里面,这样访问的时候先访问request,极大减少直接访问redis次数。 import java.io.Serializable; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.shiro.session.Session; import org.apache.shiro.session.UnknownSessionException; import org.apache.shiro.session.mgt.SessionKey; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;

通用用户权限模型实现

末鹿安然 提交于 2020-08-18 21:15:56
1. RBAC模型 现有业务系统都要用到用户权限功能,其中的理论基础就是RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。 RBAC模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种。其中RBAC0是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3都是以RBAC0为基础的升级。 RBAC0 :最简单的用户、角色、权限模型 ; RBAC1: 相对于RBAC0模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限 RBAC2: 基于RBAC0模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。 RBAC3: 就是前面几种情况的合集,一般只有在非常复杂的系统中才会用到。 2. 常见权限数据库模型 其中用户与角色是多对多,角色与菜单权限是多对多。 角色与部门是多对多,主要是为了按此角色可以访问哪些部门的数据权限,通过此动态注入相关 sql,到达动态过滤效果。 比较复杂是的数据权限的实现,具体实现过程如下: a.定义数据过滤注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface DataFilter {

Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!

谁都会走 提交于 2020-08-17 19:06:36
本文已经收录进: awesome-java (Github 上非常棒的 Java 开源项目集合) 很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Boot 进行开发,毕竟它这么好用以及天然微服务友好。不夸张的说, Spring Boot 是 Java 后端领域最最最重要的技术之一,熟练掌握它对于 Java 程序员至关重要。 这篇文章我会推荐一些优质的 Spring Boot 开源教程 和 Spring Boot 实战项目 ,帮助大家深入学习 Spring Boot。项目质量的话,大家可以放心。 不会 Spring Boot 或者想要深入学习 Spring Boot 的小伙伴直接学起来好吧!(🙅🏻‍♂️ 不需要 Spring 基础也可以直接学 Spring Boot,Java 基础和 MySQL 会了就可以直接上手学起来! ) 另外,这些项目 Guide 是根据下面三个标准选出: 项目是否还在继续维护更新,维护更新的频率如何。 项目的质量如何,这一点可以从 star、issue 以及 pr 的数量侧面反映出来。 代码质量如何,是否是僵尸项目。关于代码质量,这里说明一点,我最反感别人无脑 diss 开源项目代码质量差了,你又能耐的话自己写一个。确实,每一个开源项目都有很多可以优化的地方,这点无法否认。 Spring Boot 教程推荐