SSM整合Shiro实现RBAC(八)中

简介: SSM整合Shiro实现RBAC(八)

二.五 配置shiro 文件


文件的名称是 applicationContext-shiro.xml ,在读取 spring配置文件时,也读取进来了。 不用单独配置。


web.xml 文件中:


<!-- 启动spring -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext-*.xml</param-value>
  </context-param>


二.五.一 配置密码加密验证


<!-- 凭证匹配器 -->  
<bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">  
    <property name="hashAlgorithmName" value="md5"/>  
    <property name="hashIterations" value="10"/>  
    <property name="storedCredentialsHexEncoded" value="false"/>  
</bean> 


与 以前的 shiro.ini 文件


#加密类
credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
#加密方式
credentialsMatcher.hashAlgorithmName=md5
#加密次数
credentialsMatcher.hashIterations=10
#存储散列后的密码是否为16进制 
credentialsMatcher.storedCredentialsHexEncoded=false


是匹配的。


二.五.二 配置自定义realm, 注入密码匹配器


<!-- 配置自定义的ream -->
<bean id="myRealm" class="com.yjl.shiro.MyRealm">
  <!-- 配置密码管理 -->
  <property name="credentialsMatcher" ref="credentialsMatcher"></property>
</bean>


与以前的


#配置自定义realm
myRealm=com.yjl.shiro.MyRealm
#配置加密
myRealm.credentialsMatcher=$credentialsMatcher


是匹配的。


二.五.三 配置 securityManager 对象,注入自定义Realm


<!-- 配置securityManager, 将一些信息注入到里面 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
  <property name="realm" ref="myRealm"></property>
</bean>


与以前的:


#配置自定义realm
myRealm=com.yjl.shiro.MyRealm
#配置加密
myRealm.credentialsMatcher=$credentialsMatcher
#注入自定义的realm
securityManager.realm=$myRealm


是匹配的。


securityManager 不仅可以注入自定义Realm,还可以注入缓存,session管理,记住我等功能。


二.五.四 配置 生命周期


<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> 


与 web.xml 中 shiroFilter 部分的 targetFilterLifecycle 属性为 true 相对应。


二.五.五 配置 shiroFilter 过滤器


<!-- 配置shiroFilter 规则 ,与web.xml的过滤器中的 targetBeanName 名称保持一致-->
  <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"></property>  
    <!-- 配置登录,登录成功和没有权限的三个路径 ,以前的main 部分-->
    <property name="loginUrl" value="/User/toLogin"></property>
    <!-- <property name="successUrl" value="/Main/toMain"></property>  -->
    <property name="unauthorizedUrl" value="/Privilege/noPrivilege"></property>
    <!-- 配置规则 ,即urls部分-->
    <property name="filterChainDefinitions">
      <value>
        <!-- 配置拦截器 -->
        /static/**=anon
        /User/toLogin=anon
        /User/login=anon
        /User/logout=logout
        /Main/toMain=authc
        <!-- 没有配置的路径走认证 -->
        /**=authc
      </value>
    </property>
  </bean>


常用的,主要分为五个部分,下面依次讲解。


注意点: 该工厂 ShiroFilterFactoryBean 实例化bean 的 必须是 shiroFilter ,这个名称必须要与 web.xml中关于shiro配置的 filter-name 的名称相同。


二.五.五.一 注入 securityManager 对象


  <property name="securityManager" ref="securityManager"></property>  


二.五.五.二 配置 loginUrl 路径


  <property name="loginUrl" value="/User/toLogin"></property>


loginUrl 指的是 ,如果用户没有认证,或者没有通过认证,跳转到哪?


一般跳转到去登录页面的那个方法。


与以前 [main] 里面的


#配置权限
authc.loginUrl=/User/toLogin


对应。


二.五.五.三 配置 successUrl 路径


一般不配置这一个路径。


这个路径指的是,如果员工认证通过,跳转到哪? 认证通过,会跳转到主页, 但跳转到主页,一般都是通过程序代码固化下来,并不在这儿进行配置。 这个路径的实际意义是, 如果认证通过,就跳转到上一次要访问的页面。


即,如果用户 admin 想访问 用户的界面, /项目名/User/toList, 当用户手动输入这个网址时,发现没有认证,就会跳转到登录的界面,当用户登录成功后, 这个时候,会跳转到哪呢? 并不会跳转到主页那,而是跳转到上一次想访问的那个页面, 即 /项目名/User/toList 页面, 展示用户的相应信息。 这个功能还是非常好的,所以一般不配置这个属性值。


二.五.五.四 配置 unauthorizedUrl 路径


<property name="unauthorizedUrl" value="/Privilege/noPrivilege"></property>


unauthorizedUrl 指的是权限不足时,跳转到哪?


与以前 [main] 部分的


#跳转到权限不足的路径
roles.unauthorizedUrl=/NoPermission/NoPermission
perms.unauthorizedUrl=/NoPermission/NoPermission


相对应。


二.五.五.五 filterChainDefinitions 配置拦截器


<!-- 配置规则 ,即urls部分-->
<property name="filterChainDefinitions">
  <value>
    <!-- 配置拦截器 -->
    /static/**=anon
    /User/toLogin=anon
    /User/login=anon
    /User/logout=logout
    /Main/toMain=authc
    <!-- 没有配置的路径走认证 -->
    /**=authc
  </value>
</property>


这个与以前的 [urls] 部分


[urls]
#静态页面可以访问
/static/**=anon
#跳转到登录页面和登录方法可以访问
/User/toLogin=anon
/User/login=anon
#跳转到主页,需要认证
/Main/toMain=authc
/Privilege/getPrivilegeByUId=authc
#执行方法,不仅需要认证,还需要有相应的方法
/Dept/add=authc,perms["dept:add"]
/Dept/update=authc,perms["dept:update"]
/Dept/list=authc,perms["dept:list"]
/Dept/delete=authc,perms["dept:delete"]
/User/toList=authc,perms["user:toList"]
#退出登录
/User/logout=logout
#其他的一切资源,都需要认证
/**=authc


相对应。


发现,并没有 /Dept/add,/Dept/list … 等权限的配置。


一个系统中,会有很多的权限,不能添加一个就在 filterChainDefinitions 部分配置一个,那么就太烦繁了, 一般都是通过 注解的方式进行配置权限。


关于注解方式配置权限,老蝴蝶下面会讲解。


二.五.六 applicationContext-shiro.xml 配置文件合并


将上面的这些部分,进行合并,得到一个总的配置信息。


<!-- 凭证匹配器 -->  
  <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">  
      <property name="hashAlgorithmName" value="md5"/>  
      <property name="hashIterations" value="10"/>  
      <property name="storedCredentialsHexEncoded" value="false"/>  
  </bean>  
  <!-- 配置自定义的ream -->
  <bean id="myRealm" class="com.yjl.shiro.MyRealm">
    <!-- 配置密码管理 -->
    <property name="credentialsMatcher" ref="credentialsMatcher"></property>
  </bean>
  <!-- 配置securityManager, 将一些信息注入到里面 -->
  <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="myRealm"></property>
  </bean>
  <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  
  <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> 
  <!-- 配置shiroFilter 规则 ,与web.xml的过滤器中的 targetBeanName 名称保持一致-->
  <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"></property>  
    <!-- 配置登录,登录成功和没有权限的三个路径 ,以前的main 部分-->
    <property name="loginUrl" value="/User/toLogin"></property>
    <!-- <property name="successUrl" value="/Main/toMain"></property>  -->
    <property name="unauthorizedUrl" value="/Privilege/noPrivilege"></property>
    <!-- 配置规则 ,即urls部分-->
    <property name="filterChainDefinitions">
      <value>
        <!-- 配置拦截器 -->
        /static/**=anon
        /User/toLogin=anon
        /User/login=anon
        /User/logout=logout
        /Main/toMain=authc
        <!-- 没有配置的路径走认证 -->
        /**=authc
      </value>
    </property>
  </bean>



相关文章
SSM如何整合Shiro实现权限登陆案例
SSM如何整合Shiro实现权限登陆案例
64 0
|
Java 数据安全/隐私保护
基于SSM+Shiro+Bootstrap实现用户权限管理系统
基于SSM+Shiro+Bootstrap实现用户权限管理系统
212 0
基于SSM+Shiro+Bootstrap实现用户权限管理系统
|
安全 前端开发 Java
SSM(三)Shiro 使用详解(下)
相比有做过企业级开发的童鞋应该都有做过权限安全之类的功能吧,最先开始我采用的是建用户表,角色表,权限表,之后在拦截器中对每一个请求进行拦截,再到数据库中进行查询看当前用户是否有该权限,这样的设计能满足大多数中小型系统的需求。不过这篇所介绍的Shiro能满足之前的所有需求,并且使用简单,安全性高,而且现在越来越的多企业都在使用Shiro,这应该是一个收入的你的技能库。
|
存储 前端开发 Java
基于SSM框架的RBAC权限系统设计与实现
本文首先介绍了RBAC模型的工作原理和概念。在此基础上,介绍了企业管理系统中的管理模块的体系结构设计,其中主要包含部门管理模块、员工管理模块、授权管理模块和角色管理模块。同时,在这些模型的基础上,给出了系统的具体应用。
331 0
基于SSM框架的RBAC权限系统设计与实现
|
SQL 安全 Java
SSM(三)Shiro 使用详解(上)
相比有做过企业级开发的童鞋应该都有做过权限安全之类的功能吧,最先开始我采用的是建用户表,角色表,权限表,之后在拦截器中对每一个请求进行拦截,再到数据库中进行查询看当前用户是否有该权限,这样的设计能满足大多数中小型系统的需求。不过这篇所介绍的Shiro能满足之前的所有需求,并且使用简单,安全性高,而且现在越来越的多企业都在使用Shiro,这应该是一个收入的你的技能库。
|
缓存 前端开发 数据库
SSM整合Shiro实现RBAC(八)下
SSM整合Shiro实现RBAC(八)
150 0
SSM整合Shiro实现RBAC(八)下
|
XML 前端开发 Java
SSM整合Shiro实现RBAC(八)上
SSM整合Shiro实现RBAC(八)
149 0
SSM整合Shiro实现RBAC(八)上
|
JavaScript 前端开发 Java
基于vue(element ui) + ssm + shiro 的权限框架
随着前后端分离项目的热潮,前端各大框架的,前后端沟通部分也成了问题,之前服务端渲染的页面生成到前端来,现在前后端可能是两个服务器,一些技术的迁移,本框架的权限部分的设计思想,借鉴了前端大牛的想法,也有传统后端的设计方案,抛砖引玉,做个桥梁,实现前后端分离的权限的设计,代码仅供参考,思路仅供参考,相信优秀的你写自己的代码,用自己的思想会更为贴切,方便。
4719 0
|
18天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的大学生校园兼职附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的大学生校园兼职附带文章和源代码部署视频讲解等
41 8
|
18天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的停车场微信小程序附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的停车场微信小程序附带文章和源代码部署视频讲解等
28 6