课程计划

1、 常见权限控制方式

2、 基于shiro提供url拦截方式验证权限

3、 在realm中授权

4、 基于shiro提供注解方式验证权限

5、 总结验证权限方式(四种)

6、 用户注销

7、 基于treegrid实现菜单展示

常见的权限控制方式

2.1 url拦截实现权限控制

shiro基于过滤器实现的

 

2.2 注解方式实现权限控制

底层:代理技术

 

 

基于shiro的url拦截方式验权

 

<!-- 配置过滤器工厂 -->

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

<!-- 注入安全管理器 -->

<property name="securityManager" ref="securityManager"></property>

<!-- 注入相关页面

loginUrl :登陆页面=用户没有登录,访问某个url(要求当前用户登陆后可见)shiro框架跳转登录页

    successUrl;登陆成功页面=可以不配(通过struts2框架跳转)

    unauthorizedUrl;权限不足页面=用户登陆后访问url(要求必须有某个权限),如果用户没有权限,跳转此页面

 -->

<property name="loginUrl" value="/login.jsp"></property>

<property name="unauthorizedUrl" value="/unauthorized.jsp"></property>

<!-- 配置过滤器链:配置项目中url对应拦截规则(怎么验权) -->

<!--

等号左侧代表项目url    /** 项目中所有url

等号右侧代表url经过哪个过滤器(shiro框架提供,使用简称即可)

authc:表单认证过滤器(访问url,要求当前用户必须认证通过后才有权限访问)

anon:匿名过滤器(访问url,不需要登陆,不需要有权限==直接放行)

perms:权限授权过滤器(访问url,要求当前用户必须有某个权限)

roles:角色授权过滤器(访问url,要求当前用户必须有某个角色)

 -->

<property name="filterChainDefinitions">

<value>

/js/** = anon

/images/** = anon

/css/** = anon

/login.jsp = anon

/validatecode.jsp* = anon

/userAction_login.action = anon

/pages/base/standard.jsp = perms["standard_page"]

<!-- /courierAction_delete.action = perms["courier_delete"] -->

/pages/base/courier.jsp = roles["admin"]

/** = authc

</value>

</property>

</bean>

访问:使用权限过滤器perms 拦截到用户请求后,而当前用户没有任何权限

 

在realm中授权

通过url控制权限:当某个请求需要进行权限校验,角色校验时候,安全管理器会调用reaml中授权的方法;获取用户角色,以及权限。

 

/**

* @Description: 给用户进行授权

*/

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

System.out.println("给用户授权");

//获取当前用户

User user = (User) SecurityUtils.getSubject().getPrincipal();

//数据库结构 用户-角色:多对多  角色-权限:多对多  可以根据用户id查询用户权限

//TODO 给用户授权只能是硬编码  ,后期改为查询数据库

//创建简单授权信息(包含当前用户对应的权限,角色)

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

//添加权限标识,注意这里不能添加空白权限

//跟过perms滤器中,要求权限标识一样

info.addStringPermission("courier_page");

info.addRole("admin");

return info;

}

 

基于shiro的注解方式验权

 

1.1 开启shiro注解支持

<!-- 开启shiro注解支持 -->

<!--

自动代理:自动根据情况不同选择代理技术

有接口:使用jdk动态代理==产生实现类代理对象

没有接口:使用cglib动态代理==产生子类代理对象

设置自动代理:强制使用cglib动态代理产生代理对象==如果使用自动代理使用jdk动态代理。产生对象为null -->

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">

<property name="proxyTargetClass" value="true"></property>

</bean>

<!-- 配置验权切面:通知/增强(扩展功能代码:验证权限)+切点(shiro注解所在方法) -->

<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"></bean>

 

1.2 在Service中方法上使用shiro注解

 

 

验证当前用户是否有权限,当没有权限时候,shiro框架抛出异常;

解决:在Realm中给用户进行授权;给当前用户增加权限即可

 

 

 

1.3 使用struts2框架处理异常信息

 

 

 

 

 

总结权限控制方式

1、 url拦截:底层基于过滤器;在spring容器中配置过滤器链,配置项目中url对应拦截规则,注意:配置顺序

 

 

2、 注解方式:底层基于动态代理

a) 第一步开启shiro注解扫描 注意:强制使用cglib方式;事务注解也要使用cglib方式

b) 第二步:在service层中方法上使用shrio注解

3、 Shiro页面标签控制

<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>

 

4、 代码级别

 

Shiro框架应用

基于shiro框架实现用户注销

1、 修改index.jsp页面退出时的请求地址

 

 

2、 在Action中提供logout方法

 

 

 

菜单的查询

项目部署后,菜单数据,通过sql脚本直接添加到数据库中。

 

菜单表自关联;

 

1.1 treeGrid展示菜单数据

 

 

Treegrid要求的数据格式

 

 

1、 页面:pages/system/menu.jsp

 

2、 创建菜单三层对象-完成注入 –

3、 问题一:由于要求返回json包含children 并且方式 出现No-session

 

4、 解决:将子节点数据立即加载

 

5、 json数据时候死循环

 

6、 问题:重复数据

Servie:

 

 

项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示的更多相关文章

  1. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  2. JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理

    1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...

  3. 在realm中动态查询用户的权限&角色

    @Controller @Scope("prototype") @Namespace("/") @ParentPackage("struts-defa ...

  4. 项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据

    1 课程计划 菜单数据管理 权限数据管理 角色数据管理 用户数据管理 在realm中动态查询用户权限,角色 Shiro中整合ehcache缓存权限数据         2 菜单数据添加 2.1 使用c ...

  5. 第十九章 动态URL权限控制——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 用过Spring Security的朋友应该比较熟悉对URL进行全局的权限控制,即访问URL时进行权限匹配:如果没有权限直接跳到相应的错误页面.Shiro也支持类似的机 ...

  6. 项目一:第十一天 2、运单waybill快速录入 3、权限demo演示-了解 5、权限模块数据模型 6、基于shiro实现用户认证-登录(重点)

    1. easyui DataGrid行编辑功能 2. 运单waybill快速录入 3. 权限demo演示-了解 4. Apache shiro安全框架概述 5. 权限模块数据模型 6. 基于shiro ...

  7. Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...

  8. Winform开发框架之字段权限控制

    在我的很多Winform开发项目中(包括混合框架的项目),统一采用了权限管理模块来进行各种权限的控制,包括常规的功能权限(按钮.菜单权限).数据权限(记录的权限),另外还可以进行字段级别的字段权限控制 ...

  9. Java利用Mybatis进行数据权限控制

    权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Based ...

随机推荐

  1. vue组件父子组件传递引用类型数据

    今天在写分页功能时,发现父子组件传值时,子组件监听不到父组件中数据的变化,传递的是一个引用类型的数据 其原因是引用类型共用一个内存地址,父子组件用的是同一个对象,故子组件监听不到变化,此时就需要做一个 ...

  2. Spring_总结_04_高级配置(四)_bean的作用域

    一.前言 本文承接上一节:Spring_总结_04_高级配置(三)之处理歧义 1.单例bean Spring应用上下文中所有的bean默认都是单例的.也就是说,不管一个bean被注入到其他bean多少 ...

  3. 剑指offer--21.链表中倒数第k个结点

    定义两个指针,当一个指针指到第K个结点时,第二个指针开始向后移动 -------------- 时间限制:1秒 空间限制:32768K 热度指数:602826 本题知识点: 链表 题目描述 输入一个链 ...

  4. BEC listen and translation exercise 12

    More than 220 cities now have air quality monitoring systems and 42 others will have systems in plac ...

  5. mysql中事务隔离级别可重复读说明

    mysql中InnoDB引擎默认为可重复读的(REPEATABLE READ).修改隔离级别的方法,你可以在my.inf文件的[mysqld]中配置: transaction-isolation = ...

  6. memcached使用libevent 和 多线程模式

    一.libevent的使用 首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基于linux下epoll事件的异步模型.因此,其基本的思想就是 ...

  7. 我的 Linux 配置

    系统版本 Ubuntu 18.04 一名老年弱智 OI 选手的 Linux 配置 文本编辑器: Sublime Text 中文补丁,关闭自动补全,自动联想,括号匹配,字号 15 编译器: g++ (然 ...

  8. 2825 codevs危险的组合(递推)

    2825 危险的组合 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一些装有铀(用U表示)和铅(用L表示)的盒子,数量均足够 ...

  9. (C#)Windows Shell 外壳编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单

    (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列2 - 解释,从“桌面”开始展开 这里解释上一节中获取名称的方法 GetD ...

  10. 如何让RESTful支持DEL和PUT

    RESTful风格里面,@ModelAttribute是一个语义复杂的对象,其中一个就是在所有的被@Controller修饰的方法之前执行: @RequestParam:是指url中“?”之后的que ...