• Shiro学习笔记


    Shiro :权限菜单框架.
     
    Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密。
     
     
    用户认证
    用户认证,用户去访问系统,系统要验证用户身份的合法性。最常用的用户身份验证的方法:1、用户名密码方式、2、指纹打卡机、3、基于证书验证方法。。系统验证用户身份合法,用户方可访问系统的资源
     
    关键对象 
    subject:主体,理解为用户,可能是程序,都要去访问系统的资源,系统需要对subject进行身份认证。
    principal:身份信息,通常是唯一的,一个主体还有多个身份信息,但是都有一个主身份信息(primary principal)
    credential:凭证信息,可以是密码 、证书、指纹。
     
    总结:主体在进行身份认证时需要提供身份信息和凭证信息。
     
     
    用户授权
    用户授权,简单理解为访问控制,在用户认证通过后,系统对用户访问资源进行控制,用户具有资源的访问权限方可访问。
     
    权限模型
    主体(账号、密码)
    资源(资源名称、访问地址)
    权限(权限名称、资源id)
    角色(角色名称)
    角色和权限关系(角色id、权限id)
    主体和角色关系(主体id、角色id)
     
    1.1.1     权限模型
    主体(账号、密码)
    资源(资源名称、访问地址)
    权限(权限名称、资源id
    角色(角色名称)
    角色和权限关系(角色id、权限id
    主体和角色关系(主体id、角色id
     
    如下图:
    通常企业开发中将资源和权限表合并为一张权限表,如下:
    资源(资源名称、访问地址)
    权限(权限名称、资源id
    合并为:
    权限(权限名称、资源名称、资源访问地址)
     
     
    上图常被称为权限管理的通用模型,不过企业在开发中根据系统自身的特点还会对上图进行修改,但是用户、角色、权限、用户角色关系、角色权限关系是需要去理解的。
     
     
    applicationContext.xml中添加securityManagerper配置
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <!-- 单realm应用。如果有多个realm,使用‘realms’属性代替 -->
    <property name="realm" ref="sampleRealm" />
    <property name="cacheManager" ref="cacheManager" />
    </bean>
     <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager" />
     
    配置jdbcRealm
    <bean id="sampleRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
      <property name="dataSource" ref="dataSource" />
      <property name="authenticationQuery"
      value="select t.password from my_user t where t.username = ?" />
      <property name="userRolesQuery"
      value="select a.rolename from my_user_role t left join my_role a on t.roleid = a.id where t.username = ? " />
      <property name="permissionsQuery"
      value="SELECT B.PERMISSION FROM MY_ROLE T LEFT JOIN MY_ROLE_PERMISSION A ON T.ID = A.ROLE_ID LEFT JOIN MY_PERMISSION B ON A.PERMISSION = B.ID WHERE T.ROLENAME = ? " />
      <property name="permissionsLookupEnabled" value="true" />
      <property name="saltStyle" value="NO_SALT" />
      <property name="credentialsMatcher" ref="hashedCredentialsMatcher" />
    </bean>
     
    配置shiro注解模式
    <!-- 开启Shiro注解的Spring配置方式的beans。在lifecycleBeanPostProcessor之后运行 -->
      <bean  class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
      depends-on="lifecycleBeanPostProcessor" />
      <bean  class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
      <property name="securityManager" ref="securityManager" />
      </bean>
    注意:在与springMVC整合时必须放在springMVC的配置文件中。
    Shiro在注解模式下,登录失败,与没有权限均是通过抛出异常。并且默认并没有去处理或者捕获这些异常。在springMVC下需要配置捕获相应异常来通知用户信息,如果不配置异常会抛出到页面
    <bean
      class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name="exceptionMappings">
      <props>
      <prop key="org.apache.shiro.authz.UnauthorizedException">
      /unauthorized
      </prop>
      <prop key="org.apache.shiro.authz.UnauthenticatedException">
      /unauthenticated
      </prop>
      </props>
      </property>
    </bean>
  • 相关阅读:
    如何完全备份android在系统system分区和data分
    U3D游戏开发商思考
    安德鲁斯Toast它们的定义和防止重复显示器
    android反射组件 (一个)java 它们的定义annotation基础知识
    ZOJ 3794 Greedy Driver spfa
    [LeetCode OJ] Copy List with Random Pointer 扩大
    LAN公布java web项目的方法的外侧
    [RxJS] Creation operator: create()
    [RxJS] Creation operators: interval and timer
    [Unit Testing] Angular Test component with required
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/8966703.html
Copyright © 2020-2023  润新知