博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shiro学习笔记
阅读量:5340 次
发布时间:2019-06-15

本文共 2769 字,大约阅读时间需要 9 分钟。

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>

转载于:https://www.cnblogs.com/YangBinChina/p/8966703.html

你可能感兴趣的文章
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
YUI3自动加载树实现
查看>>
python知识思维导图
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>
织梦MIP文章内容页图片适配百度MIP规范
查看>>
[Kali_BT]通过低版本SerialPort蓝牙渗透功能手机
查看>>
C语言学习总结(三) 复杂类型
查看>>
HNOI2018
查看>>
【理财】关于理财的网站
查看>>
Ubunt中文乱码
查看>>