您的位置:首页 > 其它

Shiro权限说明

2016-07-11 00:46 218 查看
"Shiro权限说明":

关键词shiro 权限 说明
http://www.infoq.com/cn/articles/apache-shiro http://www.ibm.com/developerworks/cn/opensource/os-cn-shiro/,官网http://shiro.apache.org/
 

shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。

 

 

spring security —目前是 java 安全框架领域当之无愧的老大,已经非常成熟了;如果使用 spring 框架,可以首选 spring security,但是对于单应用开发来说,shiro
更显简单方便。

shiro 的整体架构:

 

securitymanager :shiro 通过它对外提供安全管理的各种服务;

authorizer :通常涉及用户名和密码;

authorizer:身份份验证通过后,由这个组件对登录开发人员进行访问控制的筛查,shiro
采用“基于 realm”的开发方法 ,即用户(又称
subject)、用户组、角色和 permission 的聚合体。

session manager :这个组件保证了异构客户端的访问,配置简单。它是基于 pojo/j2se 的,不跟任何的客户端或者协议绑定。

 

shiro 是如何工作的:

subject 是安全领域术语,除了代表人,它还可以是应用开发。在单应用开发中,可将其视为
user 的同义词。

principal 是 subject 的标识,一般情况下是唯一标识,比如用户名。

role 和 permission 分别代表了不同粒度的权限,从上图中可以看出 role 的粒度更大些,permission 代表了系统开发的原子权限,比如数据的修改、删除权限。对于简单的权限应用开发,可以不需要
permission。

realm 是一个执行者,负责真正的认证和鉴权。

 

实现应用开发的安全模块的关键在于:定义合适的
role 和 permission,这就需要遵循如下原则:

role 没有实质内容,只是代表一组 permission,目

此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
的是为了管理的方便,一般都是动态定义;

permission 一般都是预先定义好的,不允许动态改变,除非源代码改动,它才会变化,它是整个安全模块的基础;

要使 permission 也能动态定义,并非不可能,但是这将使鉴权非常复杂,甚至可能导致鉴权语句遍布整个程序,得不偿失;

当然有一个例外:如果知道 permission 动态定义的规则和鉴权规则,如 grails 的 fileter 中“${controllername}:${actionname}:${params.id}”也可实现 permission 的动态定义

 

shiro 的 session 是独立的,其目的是做到环境无关性。为了利用 web 环境中,shiro 实现了一个直接使用 httpsession 的 websession。

 

 

shiro的使用

大体上shiro 就是通过配置filter 经过realm 返回包含了user的authenticationinfo 合集。这个合集就是role和permissions。

权限传递结构为:permission -> role -> user


shiro web配置  

1.web.xml
<listener>

<listener-class>org.apache.shiro.web.env.environmentloaderlistener</listener-class>  </listener>

<filter>

<filter-name>shirofilter</filter-name>

<filter-class>org.apache.shiro.web.servlet开发 .shirofilter</filter-class>

</filter>

<filter-mapping>

<filter-name>shirofilter</filter-name>

<url-pattern>/*</url-pattern>

 

</filter-mapping>

●在的environmentloaderlistener初始化webenvironment实例(其中包含的一切,包括securitymanager的操作,即初始化ini配配置)。如果您需要获得此webenvironment实例,你可以调用webutils.getrequiredwebenvironment(servlet开发 context)。 
●shirofilter将使用此webenvironment到执行任何过滤请求所有必要的安全操作。

 

●自定义ini文件位置有两种办法

 1). 在web.xml中添加下面代码

<context-param>

<param-name>shiroconfiglocations</param-name>

<param-value>your_resource_location_here</param-value>

</context-param>

2). 自定义一个iniwebenvironment实例,并把实例在web.xml中配置好就可以



<context-param>


<param-name>shiroenvironmentclass</param-name>


<param-value>com.foo.bar.shiro.mywebenvironment</param-value>


</context-param>





2. ini配置浅析

ini配置文件主要分为[main] [user] [role] [urls] 四部分

[main]用于配置 securitymanager 实例

[user] 用于配置用户

[role] 用于配置用户角色

[urls] 用于配置拦截的web路径

 

3. 拦截类型

filter nameclass
anon(匿名过滤器)org.apache.shiro.web.filter.authc.anonymousfilter
authc(如果继续操作,需要

做对应的表单验证否则不能通过)
org.apache.shiro.web.filter.authc.formauthenticationfilter
authcbasic(基本http验证过滤,

如果不通过,跳转屋登录页面)
org.apache.shiro.web.filter.authc.basichttpauthenticationfilter
logout(登录退出过滤器)org.apache.shiro.web.filter.authc.logoutfilter
nosessioncreation(没有session创建过滤器)org.apache.shiro.web.filter.session.nosessioncreationfilter
perms(权限过滤器)org.apache.shiro.web.filter.authz.permissionsauthorizationfilter
port(端口过滤器,可以设置是

否是指

此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
定端口如果不是跳转到登录页面)

org.apache.shiro.web.filter.authz.portfilter
rest (http开发方法 过滤器,可

以指定如post不能进行访问等)
org.apache.shiro.web.filter.authz.httpmethodpermissionfilter
roles(角色过滤器,判断当前

用户是否指定角色)
org.apache.shiro.web.filter.authz.rolesauthorizationfilter
ssl(请求需要通过ssl,

如果不是跳转回登录页)
org.apache.shiro.web.filter.authz.sslfilter
user(如果访问一个已知用户,

比如记住我功能,走这个过滤器)
org.apache.shiro.web.filter.authc.userfilter
4.shiro三大核心介绍

subject:即“当前操作用户”。但是,在shiro中,subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(daemon account)或其他类似事物。它仅仅意味着“当前跟软件开发交互的东西”。但考虑到大多数目的和用途,你可以把它认为是shiro的“用户”概念。 subject代表了当前用户的安全操作,securitymanager则管理所有用户的安全操作。 

securitymanager:它是shiro框架的核心,典型的facade模式,shiro通过securitymanager来管理内部组件实例,并通过它来提供安全管理的各种服务。 

realm: realm充当了shiro与应用开发安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,shiro会从应用开发配置的realm中查找用户及其权限信息。 
从这个意义上讲,realm实质上是一个安全相关的dao:它封装了数据源的连接细节,并在需要时将相关数据提供给shiro。当配置shiro时,你必须至少指定一个realm,用于认证和(或)授权。配置多个realm是可以的,但是至少需要一个。 
shiro内置了可以连接大量安全数据源(又名目录)的realm,如ldap、关系其他数据库 (jdbc)、类似ini的文本配置资源以及属性文件等。如果缺省的realm不能满足需求,你还可以插入代表自定义数据源的自己的realm实现。

5.url过滤器配置说明: 
shiro可以通过配置文件实现基于url的授权验证。filterchain定义格式: 
url_ant_path_expression = path_specific_filter_chain 
每个url配置,表示匹配该url的应用开发程序请求将由对应的过滤器进行验证。 
例如: 
[urls] 
/index.html = anon 
/user/create = anon 
/user/** = authc 
/admin/** = authc, roles[administrator] 
/rest /** = authc, rest  
/remoting/rpc/** = authc, perms["remote:invoke"] 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: