项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...
1 课程计划
1、 常见权限控制方式
2、 基于shiro提供url拦截方式验证权限
3、 在realm中授权
4、 基于shiro提供注解方式验证权限
5、 总结验证权限方式(四种)
6、 用户注销
7、 基于treegrid实现菜单展示
2 常见的权限控制方式
2.1 url拦截实现权限控制
shiro基于过滤器实现的
2.2 注解方式实现权限控制
底层:代理技术
3 基于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 拦截到用户请求后,而当前用户没有任何权限。
4 在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;
}
1 基于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框架处理异常信息
2 总结权限控制方式
1、 url拦截:底层基于过滤器;在spring容器中配置过滤器链,配置项目中url对应拦截规则,注意:配置顺序
2、 注解方式:底层基于动态代理
a) 第一步开启shiro注解扫描 注意:强制使用cglib方式;事务注解也要使用cglib方式
b) 第二步:在service层中方法上使用shrio注解
3、 Shiro页面标签控制
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>
4、 代码级别
3 Shiro框架应用
1 基于shiro框架实现用户注销
1、 修改index.jsp页面退出时的请求地址
2、 在Action中提供logout方法
2 菜单的查询
项目部署后,菜单数据,通过sql脚本直接添加到数据库中。
菜单表自关联;
1.1 treeGrid展示菜单数据
Treegrid要求的数据格式
1、 页面:pages/system/menu.jsp
2、 创建菜单三层对象-完成注入 –略
3、 问题一:由于要求返回json包含children 并且方式 出现No-session
4、 解决:将子节点数据立即加载
5、 转json数据时候死循环
6、 问题:重复数据
Servie”:
转载于:https://www.cnblogs.com/shan1393/p/9250720.html
项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...相关推荐
- BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...
1.多对多添加方法 @Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(mod ...
- 魔坊APP项目-18-种植园,基于支付宝提供的沙箱测试环境开发支付接口、服务端, 处理支付结果的同步通知和异步通知、修复页面底部菜单无法被点击的BUG
种植园 一.基于支付宝提供的沙箱测试环境开发支付接口 沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info 开发文档: ht ...
- 单片机16个灯四种花样c语言,基于Proteus的MSP430单片机仿真实例5-16个花样灯控制...
一.任务要求 利用MSP430F247单片机的P1和P4端口控制16个发光二极管D1~D16,发光二极管有8种花样显示,显示速度可调,由P2端口的三个按键控制,分别是模式按键.加速按键.减速按键.模式 ...
- 美年_移动端开发_权限控制_Spring Security入门与进阶
文章目录 第三章权限控制 3.1. 认证和授权概念 3.2. 权限模块数据模型 3.3 RBAC权限模型扩展: [小结] 3.3. Spring Security简介 [讲解] [小结] 3.4. S ...
- Java利用Mybatis进行数据权限控制
权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Based ...
- Spring Security用户认证和权限控制(默认实现)
1 背景 实际应用系统中,为了安全起见,一般都必备用户认证(登录)和权限控制的功能,以识别用户是否合法,以及根据权限来控制用户是否能够执行某项操作. Spring Security是一个安全相关的框架 ...
- zuul网关找不到服务_网关zuul中对所有下游服务权限做控制zuulauth
在单体应用架构下,常见的用户-角色-菜单权限控制模式,譬如shiro,就是在每个接口方法上加RequireRole,RequirePermission,当调用到该方法时,可以从配置的数据库.缓存中来进 ...
- Nacos 权限控制介绍及实战
方案背景 Nacos自开源依赖,权限控制一直需求比较强烈,这也反应了用户需求将Nacos部署到生产环境的需求.最新发布的Nacos 1.2.0版本已经支持了服务发现和配置管理的权限控制,保障用户安全上 ...
- authorization权限控制_Nacos 权限控制介绍及实战
方案背景 Nacos自开源依赖,权限控制一直需求比较强烈,这也反应了用户需求将Nacos部署到生产环境的需求.最新发布的Nacos 1.2.0版本已经支持了服务发现和配置管理的权限控制,保障用户安全上 ...
最新文章
- 裸服务器证书,使用SSH证书远程登陆你的服务器
- MyEclipse自定义servlet模板
- C语言中连续两个printf,在C中两个连续的printf()调用的奇怪行为
- Python3 从零单排7_模块ossys
- Kibana_X-Pack管理Elasticsearch权限
- 什么命令能把Linux搞死机,Linux常见死机原因
- c#关于int(或其他类型)的字段在对象初始化时默认初始化问题的解决方法
- 人生轻似梦,芳华淡随风(转)
- webstorm注释写出的提示
- 【安装sql 2008步骤】
- 微信登录分享...报错...MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message
- 转动惯量和电机的选型
- Ant Design Vue 表格行内编辑!!!
- html回调函数,JS 回调函数
- AcWing每日一题 1934贝茜放慢脚步
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
- 长坡难滚“雪球”,零跑汽车上市只是一个 “开端”
- 安装MySQL——压缩包安装
- 各类ETF跟踪指数的数据统计分析
- 用户行为分析(如何用数据驱动增长)-读书笔记2
热门文章
- 二年级的数学题,10个人有9个人做错,你能做对吗?
- Arduino control Eeprom by IIC method of using device address in Arduino
- WPF整理-使用逻辑资源
- 多个工作表同时处理+选中不连续的单元格和工作表
- Python 数值计算库之-[Pandas](六)
- geotrellis使用(三十)使用geotrellis读取PostGIS空间数据
- Activity之间使用intent传递大量数据带来问题总结
- iOS开发 Block的用法
- 自已动手写的轮播图插件,功能不断增加中,可以下载
- 创建到另一个工作簿中已定义名称的外部引用的帮助(Excel)