shiro权限控制管理

1、shiro权限控制的原理:
    (1)基于(拦截器Filter)url粗粒度的控制
        在数据库中存放用户、权限、访问
url对应的地址,查询数据库判断
用户当前具有权限,是否包含这个
url,如果包含则允许访问,如果
不包含则提示权限不足;
 
(2)基于(aop)在方法上添加注解的细粒度控制
       可以代理、自定义注解实现,访问目标
对象的方法,在方法上添加权限注解
信息,对目标对象创建代理对象,访问真实
对象先访问代理对象,在代理对象查询数据库
时判断是否具有注解上描述需要的权限,若具有
权限,则允许访问,不具有权限,则拦截访问,
提示权限不足;
2、权限控制相关的数据表
   (1)实体:用户  角色   权限
   (2)权限:描述权限信息(粗粒度权限控制,可能在权限表描述访问资源的url信息)
   (3)角色(role):方便用户进行授权,角色就是权限的集合
   (4)menu菜单:为了方便进行动态菜单管理,
               为不同的用户定制不同的系统菜单,
               不同的用户系统菜单,可以根据用户角色进行管理
 
   多对多              多对多
     ①用户<————————————>角色<——————————————>权限   一共5张表
            

多对多
      ②角色<————————————————>菜单
    3、shiro的使用流程:
    (1)导入maven坐标
    
(2)配置web.xml
<!-- shiro security filter -->
<!--Shirofilter-->
    <filter>
   <filter-name>shiroFilter</filter-name>?
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
    </filter>
   <filter-mapping>
   <filter-name>shiroFilter</filter-name>
   <url-pattern>/*</url-pattern>
   </filter-mapping>




(3)配置applicationContext-shiro.xml文件

   <bean id="shiroFilter"
                 class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
 
            <!-- shiro 的核心安全接口 -->
                <property name="securityManager" ref="securityManager" />

            <!-- 要求登录时的链接 -->
                <property name="loginUrl" value="/login.jsp" />

            <!-- 登陆成功后要跳转的连接 -->
                 <property name="successUrl" value="/index.jsp" />
 
            <!-- 未授权时要跳转的连接 -->
                 <property name="unauthorizedUrl" value="/unauthorized.jsp" />
 
            <!-- shiro 连接约束配置 -->
                 <propery name="filterChainDefinitions">
                <value>
                   /login = authc
                   /logout = logout
                   /resource/** = anon
                   </value>
                   </property>
            </bean>
            <bean id="securityManager"
                 class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
            </bean>
            <bean id="lifecycleBeanPostProcessor"
              class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
       </bean>



anon  未认证就可以访问
authc  认证后才可以访问
perms   需要特定权限才可以访问
roles   需要特定角色才可以访问
user    需要特定用户才可以访问
port    需要特定端口才可以访问
reset   根据特定的http才可以访问


(4)根据shiro的执行流程:
应用程序--subject--securityManager---realm---安全数据
     
3、shiro的realm的认证和授权的实现
    


4、配置注解实现业务层方法级别的权限控制

  (1)在applicationContext-shiro.xml文件中配置
    <!-- 开启shiro注解模式  -->
<bean
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor" >

<!-- 使用cglb代理 -->
<property name="proxyTargetClass" value="true" />
</bean>
 
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>
 
 
 (2)基于注解的授权实现 
@ RequiresAuthentication 
     @ RequiresGuest
     @RequiresPermissions("account:create") 
     @RequiresRoles 
     @ RequiresUser 
 
5、shiro权限控制小结:
   (1)URL级别粗粒度权限控制
          ①在web.xml文件的shiroFilter拦截/*
          ②在spring的applicationContext*.xml文件
   中配置同名bean,配置filterChainDefintions拦截
          xxx.html*=anno   未登录可以访问
          xxx.html*=authc   必须登录才能访问
          xxx.html*=perms[权限] 需要特定权限才能访问
          xxx.html*=roles[角色] 需要特定角色才能访问


    (2)在spring的applicationContext.xml中配置
spring aop才对spring管理bean对象开启shiro注解支持
   @RequiresPermissions(权限)  需要特定权限才可以访问
@RequiresRoles(角色)   需要特定角色才可以访问
@requiresAuthentication 需要认证才可以访问

    (3)通过shiro自定义标签,实现页面元素显示控制
  <shiro:authenticated> 登录后才能访问
  <shiro:hasPermission name="abc"> 需要特定权限才能访问
  <shiro:hasRole  name="abc" >  需要特定角色才可以访问
  
   (4)在程序中通过代码  判断用户是否具有指定权限(不常用,有代码侵入性,不推荐使用)
 
6、补充:权限表达式   “:”代表子权限
   ①权限: courier  包含courier:add 、 courier:list 、courier:*  
   ②如果用户具有父权限,则可以操作所有子权限功能

    例如:权限courier:list  包含courier:list:10




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值