使用过shiro的朋友应该都知道在要想实现any permission的验证是比较麻烦。
很多朋友刚开始接触时以为如<shiro:hasPermission name="showcase:tree:*"> 代表验证拥有任何权限,但这是错误的。如果我们把showcase:tree:*授权给用户,那么此时表示用户具有showcase:tree资源的任意权限,如<shiro:hasPermission name="showcase:tree:*">或shiro:hasPermission name="showcase:tree:create">都能验证成功。
还有朋友认为<shiro:hasPermission name="showcase:tree:create,update"> 是或的关系,也不是,默认是且的关系。
下载了最新的shiro1.3.0-SNAPSHOT 发现并没有增加新的标签或其他支持。
因此我们需要简单的扩展下shiro来支持像spring security 3那样的@Secured支持表达式的强大注解。
不过有人已经提交了一个基于ANTLR实现的@Secured,可以在其JIRA上找到,在其官网的[ Version 2 Brainstorming ]也介绍并探讨了使用ANTLR语法的@Secured注解,可能在为了shiro 2版本添加进去,估计还得大半年,现在是1.3.0-SNAPSHOT。
对于我而言暂时不需要那么复杂的。因此暂时考虑扩展下默认的实现,在不添加任何注解/标签的基础上,简单的支持NOT、AND、OR即可。因此我们扩展AuthorizingRealm,并修改:
private static final String OR_OPERATOR = " or "; private static final String AND_OPERATOR = " and "; private static final String NOT_OPERATOR = "not "; /** * 支持or and not 关键词 不支持and or混用 * @param principals * @param permission * @return */ public boolean isPermitted(PrincipalCollection principals, String permission) { if(permission.contains(OR_OPERATOR)) { String[] permissions = permission.split(OR_OPERATOR); for(String orPermission : permissions) { if(isPermittedWithNotOperator(principals, orPermission)) { return true; } } return false; } else if(permission.contains(AND_OPERATOR)) { String[] permissions = permission.split(AND_OPERATOR); for(String orPermission : permissions) { if(!isPermittedWithNotOperator(principals, orPermission)) { return false; } } return true; } else { return isPermittedWithNotOperator(principals, permission); } } private boolean isPermittedWithNotOperator(PrincipalCollection principals, String permission) { if(permission.startsWith(NOT_OPERATOR)) { return !super.isPermitted(principals, permission.substring(NOT_OPERATOR.length())); } else { return super.isPermitted(principals, permission); } }
如上代码即可以实现简单的NOT、AND、OR支持,不过缺点是不支持复杂的如AND、OR组合。
这样我就可以像如下使用了,不需要额外的标签,就是太长,如果实现如showcase:tree:(create|update|delete)这种语法相对而言简单多了,希望未来官网支持更好的方式:
<shiro:hasPermission name="showcase:tree:create or showcase:tree:update or showcase:tree:delete">
shiro总起来说使用起来还是比较舒服的,就是更新太慢。。。。
相关推荐
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
Vue.js作为一个轻量级的前端框架,搭配Apache Shiro这样的安全管理框架,可以有效地实现前端的细粒度权限管理,如按钮级别的权限控制。本文将详细介绍如何在Vue项目中结合Shiro实现这一功能,以及所需的前置技术。 ...
SpringBoot集成Shiro实现动态URI权限是一个常见的权限管理实践,主要目的是为了实现更灵活、更安全的用户访问控制。在Web应用中,权限控制通常包括角色管理、菜单管理、操作权限(URI)管理等,而动态URI权限则允许...
然后是Apache Shiro,这是一个强大且易于使用的Java安全框架,提供了身份验证(登录)、授权(权限管理)、会话管理和加密等核心功能。Shiro能够直接与应用程序代码集成,使得安全控制更加直观和简单。 1. **从...
这个Demo提供了一个使用SpringBoot和Shiro实现简单登录验证和权限控制的实例,对于学习和理解这两个框架的集成非常有帮助。通过阅读和实践这个Demo,开发者可以更好地掌握如何在实际项目中应用SpringBoot的便捷性和...
4. **权限验证**: - Shiro提供了注解`@RequiresRoles`和`@RequiresPermissions`,可以直接在方法上标记,实现基于注解的权限控制。 - 也可以通过编程式的方式,如`Subject.checkRole()`和`Subject....
springMVC+shiro实现动态权限验证,实现动态设置用户角色,根据角色来决定哪些url可以访问 抱歉了各位需要修改下配置文件(org.eclipse.wst.common.component) <?xml version="1.0" encoding="UTF-8"?> ...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,使得在Java应用中处理安全性变得更加简单。在这个主题中,“基于Shiro拦截URL,实现权限控制”意味着我们将探讨如何利用...
Spring Boot 和 Apache Shiro 的整合是企业级应用中常见的权限认证和安全管理方案。Spring Boot 提供了简化 Java 应用程序...在实际开发中,还可以根据需求扩展 Shiro 功能,例如集成 JWT 认证、实现动态权限控制等。
总结来说,"Springboot+Shiro+Redis实现RBAC用户权限管理"是一种高效、可扩展的解决方案,它结合了Springboot的便捷性、Shiro的权限管理功能和Redis的高速缓存能力,通过org.creazycake插件进一步简化了整合过程。...
在这个场景中,我们关注的是如何利用Shiro实现根据用户权限动态显示不同的菜单。 首先,理解Shiro的核心概念是关键。在Shiro中,权限分为角色(Role)和权限(Permission)。角色是一组权限的集合,权限则具体描述...
5. 前后端通过RESTful API进行通信,前端向后端请求权限验证,后端通过Shiro处理请求并返回结果。 总之,这个基于Shiro的分布式权限管理系统结合了现代Web开发的最佳实践,利用Shiro的强大功能和Redis集群的高效...
在本项目中,我们将深入探讨如何利用SpringBoot与Shiro结合,实现从数据库加载权限、权限的动态更新以及Session共享。 1. **Shiro简介**: Apache Shiro是一个轻量级的安全框架,它提供了认证、授权、会话管理和...
在这个"shiro权限案例demo"中,我们将深入探讨Shiro如何实现用户权限的管理。 首先,让我们了解Shiro的核心组件: 1. **Subject**:是Shiro的中心概念,代表了当前“安全的用户”。它提供了进行认证、授权、会话...
SSM+Shiro框架组合是Java Web开发中常见的权限管理和安全控制解决方案,它结合了Spring、Spring MVC和MyBatis三大框架与Apache Shiro的安全库。这个项目利用这些技术实现了一个具备角色和权限控制功能的系统,使得...
分布式架构实现,基于springboot的shiro权限验证源码,包括redis,activeMq以及邮件通知等,websocket通信,mybatis链接数据库,完整的权限验证架构。
SSM+Shiro+Redis实现的权限系统是一个常见的企业级应用架构,主要用于构建安全、高效且可扩展的Web应用程序。这个系统结合了Spring、SpringMVC、MyBatis三大核心框架,以及Apache Shiro安全框架和Redis缓存技术,以...
不过,对于简单的权限控制需求,Shiro可能更加轻便易用。 在具体实现中,我们通常会在Spring的Service层调用Shiro的API进行权限判断。比如,使用`Subject`对象的`isPermitted()`或`checkPermission()`方法来检查...
在`ShiroTest`这个文件中,可能包含了测试Shiro权限控制的代码,例如设置安全配置、创建安全管理器、定义权限规则、模拟用户登录以及进行权限验证的测试用例。这些测试有助于确保权限管理功能的正确性和稳定性。 ...