首页 > 数据库 >shiro-从数据库中获取授权信息与显示菜单在页面上(注解版和jsp标签)

shiro-从数据库中获取授权信息与显示菜单在页面上(注解版和jsp标签)

时间:2023-02-08 11:32:08浏览次数:34  
标签:菜单 标签 数据库 item jsp 授权 权限 shiro


修改realm的doGetAuthorizationInfo,从数据库查询权限信息。
使用注解式授权方法。

使用jsp标签授权方法。


1.修改doGetAuthorizationInfo从数据库查询权限


// 用于授权,从数据中查询
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
//从principals获取主身份
//将getPrimaryPrincipal方法返回值转为真实身份类型
ActiveUser activeUser = (ActiveUser) principals.getPrimaryPrincipal();

//根据身份信息获取权限信息
//从数据库获取到权限数据
List<SysPermission> permissionList = null;
try {
permissionList = sysService.findPermissionListByUserId(activeUser.getUserid());
} catch (Exception e) {
e.printStackTrace();
}

//单独定一个集合对象
List<String> permissions = new ArrayList<String>();
if(permissionList!=null){
for(SysPermission sysPermission:permissionList){
//将数据库中的权限标签 符放入集合
permissions.add(sysPermission.getPercode());
}
}

//查到权限数据,返回授权信息(要包括 上边的permissions)
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//将上边查询到授权信息填充到simpleAuthorizationInfo对象中
simpleAuthorizationInfo.addStringPermissions(permissions);

return simpleAuthorizationInfo;
}




2.开启controller类aop支持

对系统中类的方法给用户授权,建议在controller层进行方法授权。
在springmvc.xml中配置:


<!-- 开启aop,对类代理 -->
<aop:config proxy-target-class="true"></aop:config>
<!-- 开启shiro注解支持 -->
<bean
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>




3.在controller方法中添加注解

@RequestMapping("/queryItems")
@RequiresPermissions("item:query")//执行该方法需要 访问该用户拥有这个权限--> "item:query"
public ModelAndView queryItems(HttpServletRequest request) throws Exception {


@RequestMapping("/editItemsList")
@RequiresPermissions("item.update")//执行此方法需要 item.update 权限
public ModelAndView editItemsList(HttpServletRequest request) throws Exception {





4.jsp标签 授权

Jsp页面添加:
<%@ tagliburi="http://shiro.apache.org/tags" prefix="shiro" %>


标签名称

标签名称
标签条件(均是显示标签内容)
<shiro:authenticated> 登录之后
<shiro:notAuthenticated> 不在登录状态时
<shiro:guest> 用户在没有RememberMe时
<shiro:user> 用户在RememberMe时
<shiro:hasAnyRoles name="abc,123" > 在有abc或者123角色时
<shiro:hasRole name="abc"> 拥有角色abc
<shiro:lacksRole name="abc"> 没有角色abc
<shiro:hasPermission name="abc"> 拥有权限资源abc
<shiro:lacksPermission name="abc"> 没有abc权限资源
<shiro:principal> 显示用户身份名称
<shiro:principal property="username"/> 显示用户身份中的属性值




修改itemsList.jsp页面

<!-- 有item:update权限才显示修改链接,没有该 权限不显示,相当 于if(hasPermission(item:update)) -->
<shiro:hasPermission name="item:update">
<a href="${pageContext.request.contextPath }/items/editItems.action?id=${item.id}">修改</a>
</shiro:hasPermission>



授权测试

当调用controller的一个方法,由于该 方法加了@RequiresPermissions("item:query") ,shiro调用realm获取数据库中的权限信息,看"item:query"是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。

当展示一个jsp页面时,页面中如果遇到<shiro:hasPermission name="item:update">,shiro调用realm获取数据库中的权限信息,看item:update是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。

问题:只要遇到注解或jsp标签的授权,都会调用realm方法查询数据库,需要使用缓存解决此问题。
















标签:菜单,标签,数据库,item,jsp,授权,权限,shiro
From: https://blog.51cto.com/u_12182769/6043810

相关文章

  • shiro-realm授权过虑器
    使用PermissionsAuthorizationFilter在applicationContext-shiro.xml中配置url所对应的权限测试流程:1、在applicationContext-shiro.xml中配置filter规则<!--商品查询需要......
  • PyQt 菜单栏的使用
    importsysfromPySide6importQtCore,QtWidgetsfromPySide6.QtWidgetsimport*frommenu_uiimportUi_MainWindow//导入uiclassmenu(QMainWindow):def_......
  • 基于jsp+sevlet+mysql实现留言板
    @目录一、系统介绍二、获取源码三、功能展示1.用户登陆2.用户注册3.留言信息4.添加留言四、其它1.其他系统实现2.获取源码一、系统介绍系统主要功能:用户登陆、用户注册......
  • jsp+sevlet+mysql实验室设备管理系统
    @目录一、系统介绍二、功能展示1.通知公告(学生)2.实验设备借用申请(学生)3.设备借用记录(学生)4.实验室预约申请(老师)5.实验室预约记录(老师)6.实验设备借用申请(老师)7.......
  • jsp+sevlet+mysql实现用户登陆和增删改查功能
    @目录一、系统介绍二、功能展示1.用户登陆2.用户列表3.查询用户信息4.添加用户信息5.修改用户信息6.删除用户信息四、其它1.其他系统实现2.获取源码一、系统介绍系统主要......
  • 自定义鼠标右键菜单
     鼠标右键弹出框<template><divclass="conversation-item-menubox-shadow1"><spanclass="menu-itemoperation-text"@click.stop="openNewPage">打......
  • jsp Request获取url信息的各种方法比较
    ​​​​​1.从Request对象中可以获取各种路径信息,以下例子:2.假设请求的页面是index.jsp,项目是WebDemo,则在index.jsp中获取有关request对象的各种路径信息如下......
  • Odoo 菜单定义和修改学习总结
    odoo菜单定义和修改学习总结环境odoo-14.0.post20221212.tar定义菜单方式1:<?xmlversion="1.0"?><odoo><menuitemid="root_menu_id"name="TopMenu"web_icon=......
  • 基于SSM+jsp的校园二手市场交易平台管理系统
    基于SSM+jsp的校园二手市场交易平台管理系统基于SSM+jsp的校园二手市场交易平台管理系统、基于SSM+jsp的二手交易平台管理系统、基于SSM+jsp的二手交易平台、基于SSM的二......
  • windows右键菜单扩展容器[开源]
    今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下:image如上图,右键菜单多了几个我自定义的菜单复制文件路径复制文件夹路......