精华内容
下载资源
问答
  • 实现在FreeMarker模板中控制对应按钮的显示隐藏主要用到了Shiro中的hasRole, hasAnyRoles, hasPermission以及Authenticated等方法,我们可以实现TemplateMethodModelEx类的相关操作,然后通过全局拦截器将对应的方法...

    实现在FreeMarker模板中控制对应按钮的显示隐藏主要用到了Shiro中的hasRole, hasAnyRoles, hasPermission以及Authenticated等方法,我们可以实现TemplateMethodModelEx类的相关操作,然后通过全局拦截器将对应的方法注入到视图模板中,就可以直接在ftl模板中使用自定义的方法进行判断了,具体代码如下:

     

    第一步实现 HasPermissionFreeMarkerMethod

    public class HasPermissionFreeMarkerMethod implements TemplateMethodModelEx {
        @Override
        public Object exec(List list) throws TemplateModelException {
            if (null == list || 1 != list.size()) {
                throw new TemplateModelException("Wrong arguments: only one argument is allowed");
            }
            Object permissionName =   list.get(0);
            return getSubject() != null && permissionName != null
                    && getSubject().isPermitted(permissionName.toString());
        }
    
        private static Subject getSubject() {
            return SecurityUtils.getSubject();
        }
    }

     

    第二步定义一个全局的拦截器

    public class ShiroFreeMarkerInterceptor implements Interceptor {
        @Override
        public void intercept(Invocation ai) {
            Controller c = ai.getController();
            c.setAttr("hasRole", new HasRoleFreeMarkerMethod());
            //c.setAttr("hasAnyRoles", new HasAnyRolesFreeMarkerMethod());
            c.setAttr("hasPermission", new HasPermissionFreeMarkerMethod());
            //c.setAttr("isAuthenticated", new AuthenticatedFreeMarkerMethod());
            // 执行正常逻辑
            ai.invoke();
        }
    }

     

    第三步在AppConfig中配置全局拦截器

        /**
         * 配置全局拦截器
         */
        public void configInterceptor(Interceptors me) {
            me.add(new ShiroInterceptor());
            me.add(new AuthInterceptor());
            me.add(new ShiroFreeMarkerInterceptor());//添加在FreeMarker视图中使用Shiro的拦截器
        }

     

    现在我们就可以在视图中直接来根据权限标识控制按钮的显示与隐藏了

    <#if hasPermission("Trade:新增")>
            <a class="btn_color_1" onclick="onEdit(0)"><i class="fa fa-plus"></i> 新增</a>
    </#if>
    <#if hasPermission("Trade:编辑")>
            <a class="btn_color_2" onclick="onEdit()"><i class="fa fa-edit"></i> 编辑</a>
    </#if>
    <#if hasPermission("Trade:删除")>
            <a class="btn_color_3" onclick="onDelete()"><i class="fa fa-remove"></i> 删除</a>
    </#if>
    <#if hasPermission("Trade:重新统计")>
            <a class="btn_color_2" onclick="onTongJi()"><i class="fa fa-bolt"></i> 重新统计</a>
    </#if>

     

    转载于:https://www.cnblogs.com/yzssoft/p/6970478.html

    展开全文
  • 再搞权限系统的时候,权限控制到菜单很容易,但是很多情况要控制到按钮接口级别,这个时候设计就要研究下了。方案好几种,这里推荐一个不错的开源方案,大伙可以参考学习下。 Spring Boot-Shiro-Vue实现 ...

    再搞权限系统的时候,权限控制到菜单很容易,但是很多情况要控制到按钮接口级别,这个时候设计就要研究下了。方案好几种,这里推荐一个不错的开源方案,大伙可以参考学习下。

    Spring Boot-Shiro-Vue实现

    权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

     

    github开源地址及系统演示地址:

    由于头条提示不让发这些网址,有需要的朋友关注我私信回复【链接】获取吧!,觉得不错的朋友可以转发支持下!

    权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

     

    Spring Boot-Shiro-Vue

    提供一套基于SpringBoot-shiro-vue的权限管理思路.

    前后端都加以控制,做到按钮/接口级别的权限

    DEMO

    测试地址

    admin/123456 管理员身份登录,可以新增用户,角色.

    角色可以分配权限

    控制菜单是否显示,新增/删除按钮是否显示

    设计思路

    核心

    每个登录用户拥有各自的N条权限,比如 文章:查看/编辑/发布/删除

    后端

    基于 RBAC新解 .

    通常我们的权限设计都是 用户--角色--权限 ,其中角色是我们写代码的人没法控制的,它可以有多条权限,每个用户又可以设计为拥有多个角色.因此如果从角色着手进行权限验证,系统都必须根据用户的配置动起来,非常复杂.

    所以我们后台设计的关键点就在于: 后台接口只验证权限,不看角色.

    角色的作用其实只是用来管理分配权限的,真正的验证只验证权限 ,而不去管你是否是那种角色.体现在代码上就是接口上注解为

    @RequiresPermissions("article:add")

    而不是

    @RequiresRoles(value = {"admin","manager","writer"}, logical = Logical.OR)

    前端

    采用了vueAdmin-template , ElementUI , 权限设计思路也是参考了 vueAdmin 的动态路由的设计.

    后端负责了接口的安全性,而前端之所以要做权限处理,最主要的目的就是隐藏掉不具有权限的菜单(路由)和按钮.

    登录系统后,后端返回此用户的权限信息,比如

    
     
    1. "userPermission":{

    2. "menuList":[

    3. "role",

    4. "user",

    5. "article"

    6. ], "roleId":1,

    7. "nickname":"超级用户",

    8. "roleName":"管理员",

    9. "permissionList":[

    10. "article:list",

    11. "article:add",

    12. "user:list",

    13. ], "userId":10003

    14. }

    根据menuList判断给此用户生成哪些路由, 根据permissionList判断给用户显示哪些按钮,能请求哪些接口.

    数据库

    最主要的是要有一张本系统内的全部权限明细表,比如下面这样

    权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

     

    权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

     

    如果某用户拥有表格中前五条权限,就可以查出他就拥有article和user两个菜单,至于页面内是否显示(新增)(修改)按钮,就根据他的permissionList来判断.

    具体实现

    有了思路,就可以根据各自的业务进行实现,本项目在此进行了简单的实现,后端代码在back文件夹,前端代码在vue文件夹.前端启动只需

    
     
    1. npm install --registry=https://registry.npm.taobao.org

    2. npm run dev

    后端就是常规的shiro配置,前端代码如果看不明白,可以参考前端权限代码说明

    分配权限页面效果

    权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

    展开全文
  • 牛逼plus,Spring Boot-Shiro-Vue权限系统(细粒度控制到按钮)
    展开全文
  • 基于spring boot 2.1.6、shiro、jwt、redis、swagger2、mybatis 、thymeleaf、layui 后台管理系统, 权限控制的方式为 RBAC。代码通熟易懂 、JWT(无状态token)过期自动刷新,数据全程 ajax 获取,封装 ajax 工具类...

    基于spring boot 2.1.6、shiro、jwt、redis、swagger2、mybatis 、thymeleaf、layui 后台管理系统, 权限控制的方式为 RBAC。代码通熟易懂 、JWT(无状态token)过期自动刷新,数据全程 ajax 获取,封装 ajax 工具类、菜单无线层级展示,解决 layui.tree 树形组件,回显问题。数据交互都是以 JSON 格式交互。后台接口RESTful 风格,支持前后端分离,app公用一套接口。


    源码获取(记得start哦)---码云

     

    展开全文
  • shiro-权限控制与RBAC分配表 注:  所有shiro使用方法都是围绕springrain项目进行的. 具体的springrain项目demo可以在之前的博客中找到. 经典权限五张表指的是:  ①用户表  ②用户-角色表  ③角色表  ④角色权限...
  • 权限控制-Shiro

    2018-08-11 09:30:41
    前面虽然基本的功能都有了但是页面按钮控制与url的控制还是没有处理。这么一个场景,虽然用户只能通过点击菜单进行各个界面的访问,假如用户知道了你的界面的访问url,直接跳过菜单访问的话,正常来说是不应该跳转...
  • 疫情期间在家闲的无聊,学习一下shiro和JWT的使用,平时工作中虽然一直用到但是始终没有从零一搭建过,本文基于该github地址https://github.com/dolyw/ShiroJwt的学习文章,本文增加了swagger的本地调试。...
  • Shiro权限管理框架粗解 一.流程 二.... ...权限(权限id,权限名称,访问地址) ...​ 对资源类型的管理称为粗颗粒度权限管理,即只控制到菜单、按钮、方法,粗粒度的例子比如:用户具有用户管理的权限,具有导出...
  • Shiro 控制url访问

    2018-02-07 16:49:11
    之前的项目用shiro只实现了菜单和按钮的隐藏显示功能,但是如果懂点技术的,直接模拟你的url访问,还会直接跳相应页面。 为了杜绝以上问题,shiro里可以在Controller的方法上加入注解来控制url访问,例如...
  • Shiro 提供了JSP 的一套JSTL 标签,用于做JSP 页面做权限控制的。可以控制一些按钮和一些超链接,或者一些显示内容。JSP 的下篇文章会讲,这篇先讲讲 Freemarker 的 Shiro 标签。 SSM(SpringMVC + ...
  • 在单体应用架构下,常见的用户-角色-菜单权限控制模式,譬如shiro,就是在每个接口方法上加RequireRole,RequirePermission,当调用该方法时,可以从配置的数据库、缓存中来进行匹配,通过这种方式来进行的权限...
  • 权限管理解决方案 本文主要介绍权限管理的解决方法: 粗颗粒度和细颗粒度 基于url拦截 使用权限管理框架 粗颗粒度和细颗粒度 ... 对资源类型的管理称为粗颗粒度权限管理,既只控制到菜单、按钮、方...
  • 前端动态路由菜单,实现精确到按钮的用户权限控制,在接口上添加@RequiresPermissions注解校验用户的权限。 问题: 项目是前后端分离的后台项目,后面可能为移动端提供服务,需要考虑保持会话问题,因为shiro是使用...
  • 本商品为 :springcloud + Springboot 微服务\分布式 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架 :springcloud Greenwich.SR1 + springboot 2.1.4 + activiti6.0.0 + mybait...
  • 特别注意:Springboot 工作流前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+activiti6.0.0+mybaits+maven+接口 前端页面:html +vue.js 形式 jquery ajax 异步跨域 json 格式数据交互 ...
  • 特别注意: Springboot 工作流前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接口 前端页面:html +vue.js 形式 jquery ajax 异步跨域 json 格式数据...
  • 特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接口 前端页面:html +vue.js 形式 jquery ajax 异步跨域 json...
  • icecloud-manager spring-boot ,shiro, freemarker, mybatis, mysql 权限管理框架 用户名/密码 admin/123456 一、 技术栈 spring-boot shiro (权限控制到按钮级别) mybatis
  • 本代码为 Springboot vue.js 前后分离 + 跨域 版本 (权限控制到菜单和按钮)后台框架:springboot2.1.2+ mybaits+maven+接口前端页面:html +vue.js 形式 jquery ajax 异步跨域 json 格式数据交互 前后分离,前后台...
  • 特别注意:Springboot 工作流前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+activiti6.0.0+mybaits+maven+接口 前端页面:html +vue.js 形式 jquery ajax 异步跨域 json 格式数据交互...
  • 本框架为 :springcloud + Springboot 微服务\分布式 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架 :springcloud Greenwich.SR1 + springboot 2.1.4 + activiti6.0.0 + mybaits + maven + json ...
  • 博文来源:www.1b23.com 别注意: Springboot 工作流前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ m...
  • SpringBoot+Shiro+LayUI权限管理系统项目-1.项目介绍

    千次阅读 多人点赞 2021-04-13 23:33:09
    项目介绍 打造一个基于RBAC架构模式的通用的、并不复杂但易用的权限管理...也就是说本系统可以控制到按钮级别的权限。 用户管理 包括用户信息的增删改查、角色授予和取消操作。用户属于一个部门,一个用户可以授予多

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 156
精华内容 62
关键字:

shiro权限控制到按钮