页面控制菜单的显示或隐藏|学习笔记

简介: 快速学习页面控制菜单的显示或隐藏

开发者学堂课程【Spring Security知识精讲与实战演示(二)页面控制菜单的显示或隐藏】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/731/detail/13048


页面控制菜单的显示或隐藏

 

页面部分,先将两个处理器关闭。现在进入页面,需要做让进来的不同的人看到不同的结果。产品管理员只能看到产品,订单管理员只能看到订单。

image.png

现在可以在上图页面中采用动态标签的方式实现。在上面加入spring-security动态标签。<%@taglib uri=“导入标签:http://www.springframework.org/security/tags”prefix=”security”%>.导入标签之后,下面的每一个可点击的菜单项都需要加上一个访问当前菜单需要的决策。按理说下图标蓝色的内容都要加

image.png

但是如果这一段加了之后,将来需要添加用户,改变决策可能会多次切换用户,有点麻烦。因此一些部分就不添加决策了。目前只给下面的添加。但是在项目开发中,上面标蓝的部分都是要添加的。

image.png

输入sec可以看到上图中有很多标签,里面的标签第一个和最后一个都已经用过了。

上图倒数第二个标签security:authentication可以用它获得当前登录之后认证的用户对象以及用户名等相关信息。这个标签其实之前也有涉及,来到header里面可以看到如下图,就是刚刚的倒数第二个标签:

image.png

需要对菜单进行全新的控制,需要用到security:authorize这个标签。写完之后后面会提供access,意思是通行。如何才能通行呢?需要在后面加上spring的表达式“hasanyrole”在这里面想要访问产品的时候,可以这样写:’ROLE-PRODUCT’’ROLE-ADMIN’意思是必须是产品管理员或者超级管理员才可以访问。这里要用单引号。之后将标签闭合。将结束的标签</security:authorize>写到</a></Ii>之后。现在产品的菜单就被保护起来了。意思就是要想访问产品管理必须是产品管理员这个角色或者是超级管理员。

同样的操作可用于订单管理。

写入security:authorize access=“hasrole”或者“hasanyrole”

需要对上面的标签进行改动,改动结果:’ROLE-ORDER’’ROLE-ADMIN’。将</security:authorize>写到</a></Ii>之后。这样今后只有产品管理员的角色,登录之后就只能看到产品管理,订单管理是看不到的。

将已经改好的代码做测试,先启动项目。再一次访问:

image.png

使用用户名xiaoma登录,点击登录。这时点击基础数据会发现没有东西在里面。没有东西是正常的,因为目前还没有这个操作角色。但是上面的东西都是可以看到的。可以对用户修改角色,目前没有角色,然后添加一个角色。点击新建,名称防止写错可以在代码中直接复制’ROLE-PRODUCT’’,之后粘贴进去。角色描述就是管理产品,点击保存。页面显示403,意思是权限不足。

image.png

目前提交的时候csrf开启了,为了今后方便测试,将csrf拦截关闭,因为目前已经知道如何操作,每次开启csrf很多功能都用不了,每一个都需要加,操作繁琐,所以现在暂时屏蔽csrf这个功能。

再次访问,使用用户名xiaoma登录,点击登录。打开系统管理,点击角色中的新建,输入角色名称:ROLE-PRODUCT,角色描述:管理产品,点击保存。新建成功。

image.png

继续新建,将ROLE-ORDER输入到角色名称,角色描述:管理订单。点击保存。目前就新建好了管理产品和管理订单。如下图:

image.png

有了以上两个管理之后,需要给用户权限,不给用户权限在用户端还是无法看到信息。

对小明的角色进行修改,现在小明的角色只能是用户,去掉他超级管理员的角色。给小明设置一个产品管理的角色。点击保存。

image.png

操作过程出现了问题,但是与本节课学习的内容无关,直接在数据库中修改。

在role中看到有两个用户,找到角色。可以看到现在是4个小明。

image.png

找到产品。产品前面是8.

image.png

可以将4,7去掉,因为是超级管理员。刷新,然后输入4,8.如下图:

image.png

这里的4代表的是小明,8代表的是产品管理。说明小明具有了产品管理的权限。9代表订单管理,分给小马,小马的标号是5。则5,9代表小马具有订单管理的权限。6必须要有。在下方输入框中输入5和9。保存。

以上可以用代码实现刚刚在数据库内手动操作的步骤。这些代码目前可能没有写完善,因此暂时手动添加,也可以看出效果。

image.png

上图可见所有参数已经修改好了。

6代表的是基本角色,这是每一个操作者都需要具备的。没有6是无法操作的,可以看到在spring-security文件中要求任何资源都必须有这个角色。如果没有这个角色页面菜单都是无法访问的,同时里面的权限也不能访问。所以USER是最基本的角色,必须都要设置。相当于在中间表中每一个用户UID都要有6这个角色,其余的可以没有。要想访问,必须要有6。

改好上述信息之后,再一次退出,重新登录。登录xiaoming用户,在主页面中只能看到产品管理,因为xiaoming只具备管理产品的权限,只有产品管理的角色,只能看见产品。上面的系统管理暂时所有用户都可以访问。

注销之后登录xiaoma页面,这时的基础数据内小马只能看到订单管理。点击进去也是可以访问的。小马的产品管理也是可以访问的。

每个用户进入页面只可以看到负责的页面,虽说都已经被控制。但是到目前为止权限管理其实并没有完全开始。

做到目前,在公司中内部使用是可以的。但是需要员工的自觉,如果遇到知道内部设置的员工,是不可以的。

例如现在登录的小马,目前公司只是希望小马可以管理订单,不能查看产品的相关信息。但是如果小马是公司的员工知道公司访问后台的地址,小马就可以手动在地址栏中拼接访问的处理器地址。将order改为product,刷新之后会发现小马此时也可以访问产品管理。点击基础数据,虽然只是显示订单管理,但是小马也可以访问到产品管理的页面。所以只是做到以上的操作,系统后台是很容易被人攻击的。

也就是说spring-security的动态标签只是在页面上做了假动作,只过滤了当前按钮显示或者隐藏。如果设置了这个角色,可以通过页面显示出来,如果没有这个角色,只是将这个按钮隐藏了,但是只是进行隐藏,并没有不允许访问。所以做到上述的操作是远远不够的。但是公司中还是需要做上述操作,假如没有此操作,菜单栏会有许多选项,浪费员工的时间。需要做到的是用户体验和功能双行,用户体验要好指的就是当前用户能够访问什么功能就只展示什么功能。功能的强壮是指后台的控制,不能访问的信息就绝对不能访问,能访问的确实能访问。

相关文章
|
8天前
|
编解码 UED
Qt侧边栏的动态切换:隐藏与显示技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了导航和工具面板的功能。在某些应用场景下,我们可能需要动态地隐藏或显示侧边栏,以优化界面布局或提供更灵活的用户体验。本文将分享如何在Qt框架下实现侧边栏的隐藏与呈现,包括技术细节和代码示例。
56 3
|
7月前
|
定位技术 iOS开发
在地图页面,自动布局控件开始是隐藏或在屏幕外需要正常显示时再为正常的显示状态的,需要在显示之前加入
在地图页面,自动布局控件开始是隐藏或在屏幕外需要正常显示时再为正常的显示状态的,需要在显示之前加入
50 0
|
小程序 前端开发 JavaScript
微信小程序分类菜单激活状态跟随列表滚动自动切换
微信小程序分类菜单激活状态跟随列表滚动自动切换
171 0
微信小程序分类菜单激活状态跟随列表滚动自动切换
|
前端开发 视频直播 JavaScript
制作侧边栏显示和隐藏效果
公司最近在做一个视频直播的功能,里面有个页面样式是需要点击收起侧边栏的,整体效果如图: 那么如何制作呢,参考了网上的代码,我发现很简单,下面就是我制作的代码: 返回 ...
1554 0
|
JavaScript
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
435 0
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
|
算法 iOS开发
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
243 0
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
|
搜索推荐
PyQt5 技巧篇-参数控制窗体右上角只显示关闭按钮实例演示
PyQt5 技巧篇-参数控制窗体右上角只显示关闭按钮实例演示
578 0
PyQt5 技巧篇-参数控制窗体右上角只显示关闭按钮实例演示
创建动态工具栏并设置工具栏按钮提示
1、创建对话框程序,导入8个图标资源。 2、在对话框头文件中声明变量,代码如下: CToolBar m_ToolBar; CImageList m_ImageList; CString  m_TipText;   3、在对话框中oninitdialg函数中创建工具栏,如下: //创建图像列表 m_ImageList.
967 0