美文网首页Java学习笔记每天写1000字每天写500字
shiro授权:链接数据库doGetAuthorizationI

shiro授权:链接数据库doGetAuthorizationI

作者: 您好简书 | 来源:发表于2019-06-22 00:02 被阅读2次

7.2 授权方式
Shiro 支持三种方式的授权:
 编程式:通过写if/else 授权代码块完成:
Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
//有权限
} else {
//无权限
}
 注解式:通过在执行的Java方法上放置相应的注解完成:
@RequiresRoles("admin")
public void hello() {
//有权限
}
 JSP/GSP 标签:在JSP/GSP 页面通过相应的标签完成:
<shiro:hasRole name="admin">
<!— 有权限—>
</shiro:hasRole>

本教程序授权测试使用第一种编程方式,实际与web系统集成使用后两种方式。

1.1.1 需求

修改realm的doGetAuthorizationInfo,从数据库查询权限信息。

使用注解式授权方法。

使用jsp标签授权方法。

1.1.2 修改doGetAuthorizationInfo从数据库查询权限

// 用于授权

  @Override

  **protected** AuthorizationInfo doGetAuthorizationInfo(

 PrincipalCollection principals) {

  //从 principals获取主身份信息

  //将getPrimaryPrincipal方法返回值转为真实身份类型(在上边的doGetAuthenticationInfo认证通过填充到SimpleAuthenticationInfo中身份类型),

 ActiveUser activeUser = (ActiveUser) principals.getPrimaryPrincipal();

  //根据身份信息获取权限信息

  //从数据库获取到权限数据

 List<SysPermission> permissionList = **null**;

  **try** {

 permissionList = sysService.findPermissionListByUserId(activeUser.getUserid());

 } **catch** (Exception e) {

  // **TODO** Auto-generated catch block

 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;

 }

1.1.3 开启controller类aop支持

对系统中类的方法给用户授权,建议在controller层进行方法授权。

在springmvc.xml中配置:

image.png

1.1.4 在controller方法中添加注解

image.png

1.1.5 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页面:


image.png

1.1.6 授权测试

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

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

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

相关文章

  • shiro授权:链接数据库doGetAuthorizationI

    7.2 授权方式Shiro 支持三种方式的授权: 编程式:通过写if/else 授权代码块完成:Subjec...

  • shiro认证与授权

    shiro认证与授权 一.shiro认证方式-1(iniRealm)+授权 以maven项目为例 不采用数据库,只...

  • shiro框架:缓存器Ehcache的详细配置流程

    1.1 shiro缓存 针对上边授权频繁查询数据库,需要使用shiro缓存。 1.1.1 缓存流程 shiro中提...

  • Shiro13-Shiro 整合开发-缓存

    解决授权频繁查询数据库问题 缓存流程 shiro 中提供了认证信息和授权信息的缓存.注意: shiro 默认关闭认...

  • SpringBoot整合Shiro(二)Shiro授权

    1.Shiro授权 Shiro授权的步骤如下: Shiro授权小例子: 通过subject.checkRoles(...

  • Shiro授权过程

    Shiro授权流程图 Shiro授权流程 创建SecurityManager; 主体授权; SecurityMan...

  • springboot + shiro +cas 集成

    shiro 认证流程图: shiro 授权流程图: shiro 认证时序图: shiro + cas 认证时序图:...

  • shiro 授权

    授权方式 编程式:通过写if/else授权代码块完成 注解式:通过在执行的Java方法上放置相应的注解完成 JSP...

  • Shiro授权

    授权组成 权限 Apache Shiro中的权限代表安全策略中最基本的元素。从根本上讲,它们是有关行为的声明,并明...

  • SSM框架下Shiro免密登录

    在做微信授权登陆的时候,由于使用shiro框架进行认证登陆,没有认证授权无法建立会话。数据库中的密码经过md5加密...

网友评论

    本文标题:shiro授权:链接数据库doGetAuthorizationI

    本文链接:https://www.haomeiwen.com/subject/khwpqctx.html