关于shiro学习总结

来源:互联网 发布:淘宝客户如何导入微信 编辑:程序博客网 时间:2024/06/06 07:14

最近学习了shiro来进行登录验证,以及权限管理.以下对shiro相关知识点进行学习与整理.

首先shiro是一个Java安全框架,它具有以下功能:   1:认证   2:加密   3:权限验证   4:会话管理

Shiro 的架构有 3 个主要的概念:Subject,SecurityManager 和 Realms。下面的关系图是关于这
些组件是如何交互的高级概述:


shiro几个关键的概念:

1.首先是SecurityManager:

SecurityManager是对管理Subject对象的对象,一般在配置web项目中,在springshiro.xml文件中配置好这个对象,之后一般不会与此对象打交道,仅仅是一个访问Subject对象的api.

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">        <property name="realm" ref="myRealm"/>    </bean>
2.Subject(当前正在执行的用户的特定的安全视图):Subject一般表示当前登录的对象,可以在代码中很容易的取到Subject对象.

Subject subject = SecurityUtils.getSubject();

通过这一行代码,我们可以获取一个正在执行的Subject对象,它仅意味着"该事物目前正与软件交互.所有 Subject 实例都被绑定到(且这是必须的)一个 SecurityManager 上.当你正与一个 Subject 进行交互时,实质上是幕后的SecurityManager 处理所有繁重的 Subject 安全操作。这反映在上面的基本流程图。

3:Realm:Realms 担当 Shiro 和你的应用程序的安全数据之间的“桥梁”或“连接器”,当它实际上与安全相
关的数据如用来执行身份验证(登录)及授权(访问控制)的用户帐户交互时,Shiro 从一个或多个为应用程
序配置的 Realm 中寻找许多这样的东西。

Realm 本质上是一个特定安全的 DAO:它封装了数据源的连接详细信息,使 Shiro 所需的相
关的数据可用。当配置 Shiro 时,你必须指定至少一个 Realm 用来进行身份验证和/或授权。SecurityManager
可能配置多个 Realms,但至少有一个是必须的



使用shiro和spring进行集成,对web项目进行控制,以下为整合的主要细节:

一.spring-shiro.xml文件

<!--SecurityManager:Subject代表某一个用户,而SecurityManager就是对这些Subject进行管理的对象    在spring-shiro.xml文件中配置,一般不需要操作    自定义的realm必须继承AuthorizingRealm,    并实现两个Abstract方法doGetAuthorizationInfo和doGetAuthenticationInfo-->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property
name="realm" ref="myRealm"/>
</bean>
<!--密码验证bean--><bean id="passwordMatcher" class="com.zc.commons.security.CustomCredentialsMatcher"/><!--Realm的bean,将其credentialsMatcher属性执行passwordMatcher--><bean id="myRealm" class="com.zc.commons.security.MyRealm">    <property name="credentialsMatcher" ref="passwordMatcher"/></bean><!--配置shiroFilter的bean-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">        <!--shiro的核心安全接口,这个属性是必须的-->        <property name="securityManager" ref="securityManager"/>        <!--登录时的链接(可以根据项目中的url进行替换),非必须的操作,默认情况下会去寻找web工程根目录下的/login.jsp页面-->        <property name="loginUrl" value="/login"/>        <property name="filterChainDefinitions">            <value>                /static/**=anon                /login=anon                /user/userinfo=anon            </value>        </property>    </bean>    <!--保证实现了shiro内部lifecycle函数的bean执行(管理生命周期)-->    <bean id ="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/></beans>


二.同时需要在web.xml文件配置如下信息,(Shiro的filter必须放在其他filter之前,这句话实在网上查看到的,不过我之前是配置在其他的filter之后的,能够运行):

<!--shiro权限过滤器--><filter>  <filter-name>shiroFilter</filter-name>  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  <async-supported>true</async-supported>  <init-param>    <!--该值缺省的时候为false, 表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理-->    <param-name>targetFilterLifecycle</param-name>    <param-value>true</param-value>  </init-param></filter><filter-mapping>  <filter-name>shiroFilter</filter-name>  <url-pattern>/*</url-pattern></filter-mapping>
三.在springConfig.xml文件中import一下spring-shiro.xml文件

<import resource="spring-shiro.xml"/>
四.在springMVC.xml文件中需要配置一下信息,用以开启shiro的权限管理的注解操作.

<!--开启切面编程自动代理--><aop:aspectj-autoproxy proxy-target-class="true"/><bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">    <property name="securityManager" ref="securityManager"/></bean>
以上对本次shiro学习做了一个简单的总结,主要目的在于巩固学习.有错勿喷!










原创粉丝点击