权限控制

第一章 Shiro简介

…衆ロ難τιáo~ 提交于 2020-11-08 19:08:48
1.1 简介 Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。 本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用。 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。这不就是我们想要的嘛,而且Shiro的API也是非常简单;其基本功能点如下图所示: Authentication: 身份认证/登录,验证用户是不是拥有相应的身份; Authorization: 授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限; Session Manager: 会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的; Cryptography: 加密,保护数据的安全性

基于角色的权限控制在springMVC框架中的实现

旧城冷巷雨未停 提交于 2019-12-06 00:03:04
前言:常规来说,我们在做权限的时候,基本就是这么几个要素:用户、角色、资源(权限点)。角色本质上是给资源分组,这样不同的group具有不同的权限来控制用户更方便一些。 一般情况下,web应用的权限控制都会设计成把请求路径(也就是url,实质是uri)作为权限点来赋予角色不同的权限,在拦截器获取用户信息后,根据用户的角色找到对应的权限点,并与当前的请求路径匹配,最终返回是否具有权限。 那么,今天我想说的是,在一般的web项目中,在spring(MVC)框架下,我们是怎么灵活使用spring框架本身完成权限校验的。 对于一个web请求来说,我们都能得到一个HttpServletRequest对象,那么这个request对象有很多信息决定了这个请求的唯一性:请求路径uri、请求方法(常用rest风格的GET/POST/PUT/DELETE...)、请求参数params、请求头header(主要包括Content-Type、Referer、User-Agent、Cookie)等,可惜传统的权限控制实现方式是比较局限的,而且严重限制了制定rest风格的url。 所以,springmvc是怎么将当前request对象和所有controller的请求进行匹配的呢?我们可以利用这个机制实现权限控制。 OK,源码分析正式开始: part I springmvc继承了servlet的核心处理类:

采用annotation对spring-mvc进行登录权限控制

穿精又带淫゛_ 提交于 2019-12-04 02:12:48
在web系统中,判断用户是否登录是一个常用功能. 本文提出一种采用annotation对spring-mvc进行用户登录判断的方法. 程序源代码 方法简介 建立一个annotation, 在需要登录判断的spring-mvc方法上进行标注. 再建立一个全局的spring-mvc的interceptor对spring-mvc方法进行过滤, 如果发现有annotation标注的, 就进行登录判断,对没有登录的用户做对应的处理. 优点 采用一个过滤器, 在需要控制的方法上进行标注, 实现和编码都比较简单. 大道至简:) ###具体的实现案例 1.建立登录判断后返回给浏览器的结果类型, (这里有两种: 传统登录页面或者ajax结果). <!-- lang: java --> public enum ResultTypeEnum { //整页刷新 page, //json数据 json } 2.建立annotation, 用于标注需要登录检查的spring-mvc方法 <!-- lang: java --> public @interface Login { ResultTypeEnum value() default ResultTypeEnum.page; } 3.建立用于过滤spring-mvc的interceptor类 <!-- lang: java--> public class

yii 权限分级式访问控制的实现(非RBAC法)

时光怂恿深爱的人放手 提交于 2019-12-01 00:32:06
主要参考资料来源:yii官网http://www.yiiframework.com/wiki/60/ 我只是做了小小的完善。 yii framework 提供了2套权限访问系统,一套是简单的filter(过滤器)模式,另一套是复杂全面的RBAC模式,我这里要讲的是第一套(因为我也刚刚学到这里)。如 果你有研究过YII官方的demo blog,一定知道,比如,由gii自动生成的user模块,自动附带了简单的filter权限分配功能,具体细节请参照blog手册的“用户验证”一章 节,以及yii官方指南的“验证和授权”一章节。(注意,我这里所指的模块,只是我个人对与user有关的文件的统称,与yii文件系统的模块 (module)含义不同。) 关于权限分配的文件大多在controllers里,比如打开UserController.php文件你会看到2个类函数。 public function filters() { return array( 'accessControl', // 实现CRUD操作的访问控制。 'postOnly + delete', ); } public function accessRules() //这里就是访问规则的设置。 { return array( array('allow', // 允许所有用户执行index,view动作。 'actions'=

Apache Shiro权限管理框架

一曲冷凌霜 提交于 2019-11-30 07:04:01
Apache Shiro 和Web项目集成 web.xml配置 <!-- Apache Shiro Filter--> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Spring.xml配置 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <!-- cas单点登录地址 http://casserve/

yii2搭建完美后台并实现rbac权限控制

ぃ、小莉子 提交于 2019-11-29 19:30:36
作者:白狼 出处: http://www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 1、安装yii2 如果你是windows平台,请看小马哥的安装教程 http://www.yiichina.com/tutorial/324 以下安装不分平台 1.1 这里就不准备用composer进行安装了,我们去 官网 下载一份高级模板到本地 我们这里放到/var/www目录下,文件名就是下载解压下来的文件名advanced,不做改动 接下来我们cd advanced开始设置应用配置 1.2 执行php init 一步一步选择操作就行了 1.3 我们本地配置一下web可访问形式检验一下安装情况 我这边本地localhost指向/var/www 因此采用 http://localhost/advanced/frontend/web/ 进行访问前台,这里是yii2默认的模板 上面罗哩罗嗦一大堆没啥好玩的,接下来我们开始朝着本篇文章的目标进行展开,重点来了。 2、配置数据库 2.1 配置数据库 修改common/config/main-local.php 实际项目中本地的数据库往往跟线上数据库不一致,我们这里配置到main-local

Servlet中的filter过滤器

邮差的信 提交于 2019-11-29 11:08:04
转载并修改自: http://blog.csdn.net/lip009/archive/2006/10/17/1337730.aspx http://tech.sina.com.cn/s/2009-11-19/00471138968.shtml @Servlet里的过滤器的主要作用 1,任何系统或网站都要判断用户是否登录。 2,网络聊天系统或论坛,功能是过滤非法文字 3,统一解决编码 @Servlet3.0之前怎么创建一个过滤器 1,生成一个普通的class类,实现Filter接口 (javax.servlet.Filter) 。 2,重写接口里面的三个方法:init,doFilter,destroy。 其中的doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。 3,然后在web.xml配置过滤器。 具体例子:1.首先写一个权限过滤filter类,实现Filter接口 import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax

我对Django权限控制的理解

孤街浪徒 提交于 2019-11-28 11:01:41
基于角色的权限系统 现在各大系统都采用的是基于角色的权限控制,这里就涉及到三个东西:用户、角色、资源(权限),在Django中就是:用户、用户组、权限。用户和角色的关系一般为多对多,角色和资源的关系也为多对多,如下图(此图来源于互联网) 这样设计有一个好处,就是在系统越来越大的时候如果给每个用户逐一赋予权限非常麻烦和繁琐,只需要给角色赋予相应的权限用户赋予他对应的角色即可,如果有新的需求只需要添加有相应权限的角色即可。 Django权限机制的实现 1、不依赖于Django中的权限模型 设计三个实体类User、Role、Resource分别对应上面提出的用户、角色、资源,User和Resource之间为多对多的关系,Role和Resource之间为多对多的关系。User中封装的是用户的信息如用户名密码等,Resource可以封装权限标识(后面再进行分析)也可以封装允许访问的URL地址。 编写装饰器对视图处理方法进行拦截 资源封装URL 在装饰器中获取当前访问的URL,取出当前用户(从Session中取,前题是在登录的时候需要把用户信息放去Session中去),迭代判断用户的所有角色绑定的资源中的URL,如果存在与当前访问URL相同的地址则放行,否则则跳转到无权限的页面。 弊端: 如果URL发生了变动需要修改资源(权限) 资源封装权限标识 在装饰器标示在视图处理方法上时传入权限标识参数