Shiro_项目_权限判断&菜单配置

Spring-shiro-Boot-11 shiro实例----权限、菜单、用户、角色 shiro中的权限最简单的使用就是菜单。 用户---角色---权限/菜单 一、菜单和权限---Permission数据模型 所以我将菜单放到了权限表中,用权限代表菜单。 (1)数据结构如下: public class Permission { private static final long serialVersionUID = 6180869216498363919L; //父节点ID,顶级为0 private Long parentId; //菜单名 private Stri 阅读详情

1 权限判断

1.1 获取到所有的权限进行判断

//这个值之后从数据库中查询到【用户-角色-权限-资源】
//map.put("/s/permission.jsp","perms[user:*]");
List<Permission> permissions = permissionService.findAll();
for (Permission permission : permissions) {
    String url = permission.getUrl();
    String sn = permission.getSn();
    map.put(url, "yxbPerms["+sn+"]");
}

1.2 重写权限拦截器

在这里插入图片描述
重写shiro 的权限拦截器 PermissionsAuthorizationFilter
写一个类去继承PermissionsAuthorizationFilter

public class ItsourceYxbPermissionsAuthorizationFilter extends PermissionsAuthorizationFilter {
    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
        Subject subject = this.getSubject(request, response);
        if (subject.getPrincipal() == null) {
            //没有登录成功后的操作
            this.saveRequestAndRedirectToLogin(request, response);
        } else {
            //登录成功后没有权限的操作
            //1.转成http的请求与响应操作
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            //2.根据请求确定是什么请求
            String xRequestedWith = httpRequest.getHeader("X-Requested-With");
            if (xRequestedWith != null &&"XMLHttpRequest".equals(xRequestedWith)) {
                //3.在这里就代表是ajax请求
                //表示ajax请求 {"success":false,"message":"没有权限"}
                httpResponse.setContentType("text/json; charset=UTF-8");
                httpResponse.getWriter().print("{\"success\":false,\"msg\":\"没有权限\"}");
            }else {
                String unauthorizedUrl = this.getUnauthorizedUrl();
                if (StringUtils.hasText(unauthorizedUrl)) {
                    WebUtils.issueRedirect(request, response, unauthorizedUrl);
                } else {
                    WebUtils.toHttp(response).sendError(401);
                }
            }
        }
        return false;
    }
}

1.3 applicationContext-shiro.xml配置自定义拦截器

<!-- 引用自定义的权限过滤器 -->
	<property name="filters">
        <map>
            <entry key="yxbPerms" value-ref="yxbPermissionsAuthorizationFilter" />
        </map>
    </property>
</bean>

<!-- 配置自定义权限过滤器 -->
<bean id="yxbPermissionsAuthorizationFilter" class="cn.itsource.shiro.ItsourceYxbPermissionsAuthorizationFilter" />

1.4 MyRealm 进行权限判断

//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    //当前用户的权限你弄出来 给 shiro
    //得到主体用户
    Employee employee = (Employee) principalCollection.getPrimaryPrincipal();
 
    Set<String> permissions = permissionService.findPermissionssnsByLoginUser(employee.getId());
    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
    simpleAuthorizationInfo.addStringPermissions(permissions);
    //返回权限里面  判断
    return simpleAuthorizationInfo;
}

2 菜单操作

2.1 设计domain层

2.1.1 配置menu类
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
@JsonIgnore
private Menu parent;

@Transient//临时属性
private List<Menu> children = new ArrayList<>();

public String getText(){
   return name;
}
2.1.2 配置Permission类
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "menu_id")
private Menu menu;

2.2 完成菜单显示功能

2.2.1 MenuRepository类
@Query("select distinct m from Employee e join e.roles r join r.permissions p join p.menu m where e.id = ?1")
List<Menu> findMenuByLoginUser(Long userId);
2.2.2 MenuServiceImpl类覆写方法
//自己构造需要的菜单出来
@Override
public List<Menu> findMenuByLoginUser(Long userId) {
    //所有的子菜单
    List<Menu> childrenList = menuRepository.findMenuByLoginUser(userId);
    //创建父级合存放父菜单
    List<Menu> parentList = new ArrayList<>();
    for (Menu childrenMenu : childrenList) {
        //得到父菜单
        Menu parent = childrenMenu.getParent();
        if(!parentList.contains(parent)){
            parentList.add(parent);
        }
        //存在父菜单
        parent.getChildren().add(childrenMenu);
    }
    return parentList;
}
2.2.3 Controller层
@RequestMapping("/findMenuByLoginUser")
@ResponseBody
public List<Menu> findMenuByLoginUser(){
    Employee employee = UserContext.getUser();
    return menuService.findMenuByLoginUser(employee.getId());
}

3 页面按钮权限控制

用户对应的有相应的权限时,该按钮才显示出来

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<shiro:hasPermission name="employee:save">
    <a href="#"  data-method="add" class="easyui-linkbutton" iconCls="icon-add" plain="true">添加</a>
</shiro:hasPermission>
<shiro:hasPermission name="employee:update">
    <a href="#"  data-method="edit" class="easyui-linkbutton" iconCls="icon-edit" plain="true">修改</a>
</shiro:hasPermission>
<shiro:hasPermission name="employee:delete">
    <a href="#"  data-method="del" class="easyui-linkbutton" iconCls="icon-remove" plain="true">删除</a>
</shiro:hasPermission>
SpringBoot+Shiro配置数据库实现后台管理页面根据角色权限动态生成菜单栏 目录前言配置数据库动态生成菜单栏步骤后台搭建数据库表后台实现shiro配置总结参考表数据测试页面效果 前言 SpringBoot+Shiro做后台管理项目配置权限时,普遍的做法是通过配置shiro标签在html页面里面,来判断当前用户是否拥有该权限,来确认是否展示当前菜单,shiro标签类似如下: &lt;!--验证当前用户是否拥有指定权限。 --&gt; &lt;a shiro:hasPerm... 阅读详情

相关推荐

springboot-整合shiro和vue的验证登录和权限

springboot-整合shiro和vue的验证登录和权限 文章目录springboot-整合shiro和vue的验证登录和权限1.配置1.1数据表这里权限控制有5张表,详情见代码中的test.sql文件1.2工程说明:1.3springboot下的shiro配置1.4shiro登录验证的使用:1.5前端采用vue2.测试 完整代码下载链接: https://github.com/2010yhh...

2010yhh 1万+

shiro加sso登录分配权限菜单

1.前端页面登录,根据路径进入后端执行方法 2.到后端会先通过gaeway代理找到指定的服务器,通过config后,进入方法 3.然后进入判断是用户还是会员,然后进入对应的类执行方法 根据注解@Qualifier(“userAuthService”)里面的名称判断是用户还是会员 描述: 1.进入目标类后通过自定义的CustomUsernamePasswordToken类 再次验证用户还是会员并且收集相应的信息, 2.再通过SecurityUtils.getSubject()工具获取主体信息,也就是用户信

weixin_48811255的博客 2396

Shiro框架在项目中的应用

1、Shiro 框架简介 Shiro 概述 Shiro 是Apache公司推出一个权限管理框架,其内部封装了项目中认证,授权,加密,会话等逻辑操作,通过Shiro框架可以简化我们项目权限控制逻辑的代码的编写。其认证和授权业务分析,如图所示: Shiro 框架概要架构 Shiro 框架中主要通过Subject,SecurityManager,Realm对象完整认证和授权业务,其简要架构如下: 其中: Subject 此对象负责提交用户身份、权限等信息 SecurityManager 负责完成认证、授权等核

weixin_54685622的博客 6516

基于Shiro框架的权限系统,包括登录权限、角色权限、菜单权限,spring-boot + mybatis + shiro 20190809

一、简介 Shiro 这个框架,先甩一张网上流行的架构图,看起来很高大上,然后呢,就不用细看了,知道哪个里面嵌套哪个,了解下大体结构,方便理解后面的代码结构: 博主对权限系统理解有限,此入门项目涵盖三部分权限场景,权限够用了:登录、接口权限、菜单权限 二、环境搭建 IDEA:http://www.ilearn1234.com/#/tool?id=1&amp;type=tool JDK:ht...

一个千万开发人员中的程序员 2152

java的细粒度权限和shiro权限校验 ssh

java的细粒度权限和shiro权限校验 Spring + Struts + hibernate

springboot+权限管理系统 shiro + ssm实现 实现菜单,自用

权限管理系统 shiro + ssm实现,实现菜单,有学习的可以下载哦!项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存,quartz定时任务(没有具体业务实现)等技术点都在项目中实现了,可谓是麻雀虽小五脏俱全!项目也整合了redis做缓存,把pom.xml中spring-boot-starter-data-redis和com.xe.demo.common.support.redis包下的注释去掉,

后端——》shiro系统权限认证完整demo及讲解

shiro是一款很强大的安全管理、权限认证框架。可以做登录权限管理,接口权限管理。如下,可以通过页面权限按钮控制用户是否拥有查询、新增、编辑的权限,完成后功能如下:在管理登录后给普通用户设置权限,可以是菜单权限,也可以是菜单列表查询权限和列表按钮权限。其中菜单的权限可以只通过代码逻辑控制,而列表查询和按钮接口的权限就可以交给shiro来管理。 直接上实现步骤吧。 大的步骤一:前期需要...

叙传 1639

spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

最全Shiro教程,一篇学会Shiro权限管理

声明:本文是博主观看bilibili上Java涛哥视频学习的Shiro框架所整理笔记,学完思路清晰,原文代码大致相同,原视频链接附上,方便以后学习查看。 Shiro ​ Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。 一、权限管理 不同身份的人进入系统所完成的操作不同,如下图,当一个系统包含左侧所有菜单功能时,要求不同人员登录展示不

老达摩的博客 3万+

深入MoveIt与OMPL集成开发:从源码编译到自定义规划算法实战

本文详细介绍了如何从源码编译集成MoveIt与OMPL,并实现自定义规划算法的完整流程。通过清理环境、获取源码、解决编译依赖与错误,最终指导开发者创建并集成名为MyRRT的自定义规划算法,从而实现对机器人运动规划栈的深度定制与优化。

h0i1j2k3l的博客 467

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 992

使用shiro完成权限判断

一、权限判断 获取到所有权限进行判断,应该从数据库中获取 public class FilterChainDefinitionMapFactory { @Autowired private IPermissionService iPermissionService; public LinkedHashMap&lt;String,String&gt; builderFilter...

weixin_44860790的博客 4032

深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论

大众点评网站采用前后端分离架构,通过Ajax接口动态加载数据。按F12打开开发者工具,切换到Network(网络)面板。实际环境中,我们需要使用Python重现这一加密逻辑。查看请求响应,寻找包含评论数据的JSON接口。参数是大众点评的反爬机制核心,需要特别处理。:尊重网站的robots.txt文件规定。:仅将数据用于合法合规的研究和分析目的。:不侵犯大众点评的商业秘密和知识产权。打开大众点评网站,进入任意商户页面。:对采集到的用户信息进行脱敏处理。:避免对目标网站造成过大负担。

Z_suger7的博客 1580

Shiro权限控制+整合shiro

Shiro权限控制 0.1传统的权限认证方式 特点:为每个人单独的分配权限模块,能够实现权限控制,但是当公司人员庞大之后,非常难管理 上述权限控制如何设计表? 关系:员工和菜单权限的关系:多对多 员工id 菜单名称 1 取派管理 2 快递员管理 2 运单管理 好处:可以方便的 实现权限控制 缺陷:比如当修改权限的时候,公司统一的给组长级别的人 加一个“计算工资”权限,...

Armymans的博客 2万+

从零到一,打造你的无人机侦察兵!树莓派+Python+MQTT,实时目标检测全攻略

物联网、人工智能与计算机视觉三大前沿技术的深度融合。

u013558123的博客 1472

APM32取代STM32的经验分享

我仔细检查了代码中与硬件相关的部分,例如外设寄存器的访问和中断处理程序的设置,并进行了相应的修改。在本文中,我将分享我将APM32引入项目中取代STM32的经验,并提供相应的源代码。我查看了APM32的官方网站、开发者论坛和相关社交媒体,了解了开发者社区的活跃度和可用的资源。总结起来,将APM32替换STM32的过程需要经过几个关键步骤:了解APM32的规格和功能、评估软件生态系统、迁移代码和调试,以及性能和功耗优化。在开始替换之前,我对APM32进行了详细的研究和评估,以确保它能够满足项目的需求。

UplKubernetes的博客 2004

项目中加入权限判断和菜单配置

1.在项目添加权限 1.shiro处理权限流程: ​ (1)把所有的权限交给shiro管理 --createFilterChainDefinitionMap 可以体现处理 ​ (2)在realm里面 就要查询当前用户的权限,如果这个权限在shiro管理返回之 内,这个用户就有响应的权限 否则就没有 1.1从数据库查询所有权限交个shiro管理 List&lt;Permis...

weixin_45654934的博客 649

Kubernetes 集群升级与备份恢复:从 1.24 到 1.30 的平滑升级实战

详解 Kubernetes 集群版本升级流程(kubeadm 方式),包括前置检查、组件逐个升级、节点排水与恢复,同时演示 etcd 备份与集群灾难恢复方案。

kaixin110a的博客 35

权限判断和菜单配置

1.项目中添加权限 shiro处理权限流程: ​ (1)把所有的权限交给shiro管理 --createFilterChainDefinitionMap 可以体现处理 ​ (2)在realm里面 就要查询当前用户的权限,如果这个权限在shiro管理返回之内,这个用户就有响应的权限 否则就没有 1.1.获取到所有权限交给shiro管理 List&lt;Permission&gt...

qq_43853427的博客 566

msfvenom制作windows/linux/android/ios木马

msfvenom选项如下 -p, --payload&lt;payload&gt; 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled &lt;length&gt;为payload预先指定一个NOP滑动长度。 -f, --format &lt;format&gt;指定输出格式(使

Cwillchris的博客 2732

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

shiro权限管理mysql_Shiro通过数据库配置后台管理项目权限

前言SpringBoot整合Shiro配置后台管理项目权限,普遍的方式是通过添加shiro标签在html文件里面,然后判断当前用户是否拥有当前权限,来确认是否展示当前菜单,shiro标签类似如下:add用户 没有权限 权限与判断 这种方式缺点是需要手写所有菜单标签,也要加上对应的权限标识,在菜单列表比较多的时候,index页面会显得很臃肿,而且自己也容易混淆其中的权限标识。上次看了同事管理权限的...

weixin_39986466的博客 494

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

shiro权限的实例与菜单

在项目添加权限 shiro处理权限流程: ​ (1)把所有的权限交给shiro管理 --createFilterChainDefinitionMap 可以体现处理 ​ (2)在realm里面 就要查询当前用户的权限,如果这个权限在shiro管理返回之内,这个用户就有响应的权限 否则就没有 从数据库查询所有权限交个shiro管理 List&lt;Permission&gt; permissi...

y1770464784的博客 811

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

用Shiro配置菜单url 替代Permission的范例

Shiro的权限可以用role,permission,是否登录等等方式限定,详情可以参考 https://blog.youkuaiyun.com/howard789/article/details/83305478 但是这样管理大型项目的时候会很混乱,因为太复杂了 所以另一个思路,是用菜单URL作为permission来管理,每一个用户分配其角色(可以有多个角色),这个系统要求必须登录才能使用,如果是对...

howard789的博客 1108
上一篇: shiro_项目_登录与权限验证
下一篇: java_项目_EasyPoi导入与导出
虞铭轩、
博客等级 码龄7年 3粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值