日期:2014-05-17  浏览次数:20715 次

安全认证框架-Apache Shiro研究心得

?

最近因为项目需要,研究了一下Apache Shiro安全认证框架,把心得记录下来。

(by?西风吹雨 原创)

http://blog.sina.com.cn/s/blog_6638b10d0100pd88.html

?????Apache Shrio是一个安全认证框架,和Spring Security相比,在于他使用了和比较简洁易懂的认证和授权方式。其提供的native-session(即把用户认证后的授权信息保存在其自身提供Session中)机制,这样就可以和HttpSession、EJB Session Bean的基于容器的Session脱耦,到到和客户端应用、Flex应用、远程方法调用等都可以使用它来配置权限认证。?

?1、sessionMode

????在普通的WEB项目中,我们可以选择使用native session或者是HttpSession,通过设置securityManager的sessionMode参数为http或native即可。

?2、realm

????我们可以基于jdbc,ldap,text,activeDirectory,jndi等多种方式来获取用户基本信息,角色信息,权限信息等。只需要在securityManager中指定使用相应的realm实现即可,其在这各方面都提供了对应的缺省实现,比如我们常用的基于数据库表的形式来配置用户权限信息,就可以使用其缺省实现的jdbcRealm(org.apache.shiro.realm.jdbc.JdbcRealm)。当然,如果认证信息来自于多方面,多个不同的来源(比如来自两个库中,或者一个数据库,一个是ldap,再配上一个缺省的基于文本的测试用等等),我们可以为securityManager指定realms参数,即把这一组安全配置都配置上。各个具体的realm实现提供了方法来获取用户基本信息、角色、权限等。

????realm的授权信息可以存放在Cache中,Cache的名称可以通过设置其authorizationCacheName参数指定。

3、缓存 ???

???目前Shrio缺省提供了基于ehCache来缓存用户认证信息和授权信息的实现。只需要配置

org.apache.shiro.web.mgt.DefaultWebSecurityManager 这个 cacheManager并设置给SecurityManager即可。如果项目中已经存在使用的ehCacheManager配置(org.springframework.cache.ehcache.EhCacheManagerFactoryBean),DefaultWebSecurityManager则可以指定使用现有的ehCacheManager,如果不指定,它将自行使用缺省配置创建一个。同时,也可以设置cacheManagerConfigFile参数来指定ehCache的配置文件。

?

下例中的shiro.authorizationCache是用来存放授权信息的Cache,我们在配置realm(如myRealm或jdbcReaml)时,把authorizationCacheName属性设置shiro.authorizationCache来对应。

?

ehcache.xml

<ehcache>

????<diskStore path="java.io.tmpdir/