课程计划

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. Java_脚本引擎_01_用法入门

    一.前言 最近有个需求,需要在js中调用java,这样能避免更新java,从而实现代码的热更新. 于是想到用 Nashorn JavaScript 引擎. 二.概述 通过 JDK 8 的 Nashor ...

  2. skynet coroutine 运行笔记

    阅读云大的博客以及网上关于 skynet 的文章,总是会谈服务与消息.不怎么看得懂代码,光读这些文字真的很空洞,不明白说啥.网络的力量是伟大的,相信总能找到一些解决自己疑惑的文章.然后找到了这篇讲解 ...

  3. Java How to Iterate Map

    常用iterate 方法 Map<Integer, String> m = new HashMap<Integer, String>(); for(Map.Entry<I ...

  4. Js中的prototype的用法二

    用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了, ...

  5. TexStudio 非常好用的Latex软件

    先大概写一下,免得忘了,等有时间详细补充. 跨平台.免费. 语法高亮 方便的公式.符号选择界面 可以配置Latex,pdflatex,xelatex等默认编译命令 集成了pdf阅读器,可在阅读器中浏览 ...

  6. PHP根据两点间的经纬度计算距离,php两点经纬度计算(转)

    这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经 ...

  7. 设置eclipse中jsp/html文件好看的自动排版

    注:本文转载于ieayoio,原文链接:https://blog.csdn.net/ieayoio/article/details/49930587#8912689 eclipse中jsp文件代码的排 ...

  8. 机器学习:调整kNN的超参数

    一.评测标准 模型的测评标准:分类的准确度(accuracy): 预测准确度 = 预测成功的样本个数/预测数据集样本总数: 二.超参数 超参数:运行机器学习算法前需要指定的参数: kNN算法中的超参数 ...

  9. Excel开发学习笔记:界面交互与控件的布局

    遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多包涵. , ).value ...

  10. 2016全国大学生信息安全竞赛(Misc)

    你好,i春秋: 关注i春秋公众微信号,然后发送CTF,机器人会问星期几,按实回答,然后发送你好,机器人会回复你好,然后随便发几句,机器人会问是否愿意陪他聊天,回复不愿意,机器人就会发flag kill ...