zoukankan      html  css  js  c++  java
  • Shiro权限说明

    "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 name class
    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"] 


  • 相关阅读:
    DRF (Django REST framework) 框架介绍(2)
    DRF (Django REST framework) 框架介绍(1)
    Django中的Admin站点
    Django中的模板和表单
    Django数据库
    跨站请求伪造CSRF以及Flask中的解决办法
    Flask中的模板,Jinjia2介绍
    Flask中的上下文和flask-script扩展
    化学品撮合交易系统
    化学品产品查询系统解决方案
  • 原文地址:https://www.cnblogs.com/t0404/p/10291042.html
Copyright © 2011-2022 走看看