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

课程计划

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:

 

 

原文地址:https://www.cnblogs.com/shan1393/p/9250720.html

时间: 2024-10-12 04:19:37

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

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

1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器,整合ehcache环境,只需要配置即可.     <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>

在realm中动态查询用户的权限&amp;角色

@Controller @Scope("prototype") @Namespace("/") @ParentPackage("struts-default") @Results({ @Result(name = "login", location = "/login.jsp"), @Result(name = "index", type = "redirect",

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

1 课程计划 菜单数据管理 权限数据管理 角色数据管理 用户数据管理 在realm中动态查询用户权限,角色 Shiro中整合ehcache缓存权限数据         2 菜单数据添加 2.1 使用combotree父菜单项数据     1. 页面:menu_add.jsp 2. 修改组件样式:easyui-combotree,修改url  树型表格treeGrid跟下来数combotree要求数据格式基本一致. Combotree通过text属性展示文本.   3. 使用treegrid组件的

Java web自定义标签按钮级别权限控制完美诠释(jplogic 快速开发平台)

接下来跟大家聊聊JavaWeb中权限控制,往大的方向说可以聊聊整合应用系统中的权限控制.在聊权限控制之前先跟大家聊聊RBAC.那么什么是RBAC呢?RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联的,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.角色可依新的需求和系统的

RABC权限控制(页面操作角色,权限和进行分配)

上一节主要说的是如何通过url进行权限控制,这一节就说一下如何开发一个权限控制的界面,这样我们就能很方便的创建角色,并分配给用户不同角色和不同权限. 1.编写角色管理页面 这个编写较为简单,主要是通过modelform快速实现的,下面代码比较简单,我就不多说了 效果图如下: 代码如下: def role_list(request): """角色列表""" roles_list = Role.objects.all() # 分页 current_p

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

spring AOP + 自定义注解实现权限控制小例子

今天看了一下黑马程序员的视频,上面讲到一个使用spring AOP + 自定义注解的方式来实现权限控制的一个小例子,个人觉得还是可以借鉴,整理出来与大家分享. 需求:service层有一些方法,这些方法需要不同的权限才能访问. 实现方案:自定义一个PrivilegeInfo的注解,使用这个注解为service层中的方法进行权限配置,在aop中根据PrivilegeInfo注解的值,判断用户是否拥有访问目标方法的权限,有则访问目标方法,没有则给出提示. 关键技术:自定义注解及注解解析,spring

linux权限控制机制

linux对于用户权限的分配有着很严格的约束,在linux中一切皆文件的概念已深入人心,它通过对不同的文件定义其属主及所属用户组的方式控制着文件的访问权限.在linux中站在文件的角度来考虑,系统角色大概分为四种,分别第一种超级用户,第二种文件或目录的属主也就是文件的所有者,第三种角色是属主的同组人,第四种便是其他人,这也就是Linux基于UGO的权限控制模型,U代User,G代表Group,O代表Other,每一个文件的权限基于UGO进行设置.权限三个一组(rwx),对应UGO分别设置每一个文

总结权限控制方式 ----------(2)

1. URL拦截方式:在spring配置文件中配置过滤器链:配置项目请求对应拦截规则   2. 注解方式: a)开启注解扫描   b)service方法使用注解 验证当前用户是否有权限,当没有权限时候,shiro框架抛出异常: 解决:在Realm中给用户进行授权下:给当前用户增加权限即可 3. 页面标签实现权限控制 a) 导入标签库 <%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %&g