分享

spring+shiro+jasig

 KILLKISS 2015-07-30

这篇主要讲 spring相关主要配置文件

  1、位于classpath路径下的spring-shirocas-web.xml 

    

  1. <!-- 缓存管理器 ehcache 的配置 -->  
  2.     <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  3.         <property name="cacheManagerConfigFile" value="classpath:ehcache.xml" />  
  4.     </bean>  

ehcache.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <ehcache name="shirocache">  
  3.   
  4.     <diskStore path="java.io.tmpdir"/>  
  5.   
  6.     <!-- 登录记录缓存 锁定10分钟 -->  
  7.     <cache name="passwordRetryCache"  
  8.            maxEntriesLocalHeap="2000"  
  9.            eternal="false"  
  10.            timeToIdleSeconds="3600"  
  11.            timeToLiveSeconds="0"  
  12.            overflowToDisk="false"  
  13.            statistics="true">  
  14.     </cache>  
  15.   
  16.     <cache name="authorizationCache"  
  17.            maxEntriesLocalHeap="2000"  
  18.            eternal="false"  
  19.            timeToIdleSeconds="3600"  
  20.            timeToLiveSeconds="0"  
  21.            overflowToDisk="false"  
  22.            statistics="true">  
  23.     </cache>  
  24.   
  25.     <cache name="authenticationCache"  
  26.            maxEntriesLocalHeap="2000"  
  27.            eternal="false"  
  28.            timeToIdleSeconds="3600"  
  29.            timeToLiveSeconds="0"  
  30.            overflowToDisk="false"  
  31.            statistics="true">  
  32.     </cache>  
  33.   
  34.     <cache name="shiro-activeSessionCache"  
  35.            maxEntriesLocalHeap="2000"  
  36.            eternal="false"  
  37.            timeToIdleSeconds="3600"  
  38.            timeToLiveSeconds="0"  
  39.            overflowToDisk="false"  
  40.            statistics="true">  
  41.     </cache>  
  42.   
  43. </ehcache>  
  自定义casRealm
  1. bean id="casRealm" class="com.test.client1.shiro.MyCasRealm">  
  2.         <property name="cachingEnabled" value="true" />  
  3.         <property name="authenticationCachingEnabled" value="true" />  
  4.         <property name="authenticationCacheName" value="authenticationCache" />  
  5.         <property name="authorizationCachingEnabled" value="true" />  
  6.         <property name="authorizationCacheName" value="authorizationCache" />  
  7.         <property name="casServerUrlPrefix" value="http://localhost:8080/cas" />  <!--该地址为cas server地址  
  8.         <property name="casService" value="http://localhost:8080/client1/shiro-cas" /> <!-- 该地址为client1 的访问地址+ 下面配置的cas  filter -->    
  9.     </bean>  

MyCasRelam.java 内容

    

  1. import org.apache.shiro.authz.AuthorizationInfo;  
  2. import org.apache.shiro.cas.CasRealm;  
  3. import org.apache.shiro.subject.PrincipalCollection;  
  4. import org.hibernate.Session;  
  5. import org.hibernate.SessionFactory;  
  6.   
  7.   
  8. public class MyCasRealm extends CasRealm{  
  9.       
  10.       
  11.       
  12.     @Override  
  13.     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  
  14.         String username = (String)principals.getPrimaryPrincipal();  //从这里可以从cas server获得认证通过的用户名,得到后我们可以根据用户名进行具体的授权  
  15.        //也可以从  Subject subject = SecurityUtils.getSubject();  
  16. <span style="white-space:pre">        </span>//return (String)subject.getPrincipals().asList().get(0); 中取得,因为已经整合后 cas 交给了 shiro-cas  
  17.     /*  PermissionService service = (PermissionService)SpringContextUtil.getBean("PermissionService");  
  18.         List<String> codes = service.findPermissionCodeByUsername(username); 
  19.         if(codes != null && codes.size() > 0){ 
  20.              SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); 
  21.                  for (String str : codes) 
  22.                     { 
  23.                         authorizationInfo.addStringPermission(str); 
  24. //                       info.addRole(role); 
  25.                     } 
  26.                 return authorizationInfo; 
  27.         }*/  
  28.        return  null;  
  29.     }  
  30. }  

shirocas-web.xml配置 重要

  1. <!-- Shiro的Web过滤器 -->  
  2.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  3.         <property name="securityManager" ref="securityManager" />  
  4.         <property name="loginUrl"  
  5.             value="http://localhost:8080/cas/login?service=http://localhost:8080/client1/shiro-cas" /> <!--访问client1 时,如果未通过cas认证将会跳转到认证中心,通过得跳转到下面配置的successUrl 里的地址 -->  
  6.         <property name="successUrl" value="http://localhost:8080/client1/index.jsp" />  
  7.         <property name="filters">  
  8.             <util:map>  
  9.                 <entry key="authc" value-ref="formAuthenticationFilter" />  
  10.                 <entry key="cas" value-ref="casFilter" />  
  11.             </util:map>  
  12.         </property>  
  13.         <property name="filterChainDefinitions">  
  14.             <value>  
  15.                 /casFailure.jsp = anon  
  16.                 /shiro-cas* = cas  
  17.                 /images/** = anon  
  18.                 /css/** = anon  
  19.                 /js/** = anon  
  20.                 /static/** = anon  
  21.                 /logout = logout  
  22.                 /** = authc  
  23.             </value>  
  24.         </property>  
  25.     </bean>  

  1. <!-- 会话ID生成器 -->  
  2. <bean id="sessionIdGenerator"  
  3.     class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator" />  
  4.   
  5. <!-- 会话Cookie模板 -->  
  6. <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
  7.     <constructor-arg value="sid" />  
  8.     <property name="httpOnly" value="true" />  
  9.     <property name="maxAge" value="-1" />  
  10. </bean>  
  11.   
  12. <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
  13.     <constructor-arg value="rememberMe" />  
  14.     <property name="httpOnly" value="true" />  
  15.     <property name="maxAge" value="2592000" /><!-- 30天 -->  
  16. </bean>  
  17.   
  18. <!-- rememberMe管理器  如需要记住功能 可删掉相关配置<span style="white-space:pre">    
  19. lt;/span>    <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">  
  20.     <!-- rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)-->  
  21.     <property name="cipherKey"  
  22.         value="#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}" />  
  23.     <property name="cookie" ref="rememberMeCookie" />  
  24. </bean>  
  25.   
  26. <!-- 会话DAO -->  
  27. <bean id="sessionDAO"  
  28.     class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">  
  29.     <property name="activeSessionsCacheName" value="shiro-activeSessionCache" />  
  30.     <property name="sessionIdGenerator" ref="sessionIdGenerator" />  
  31. </bean>  
  32.   
  33. <!-- 会话验证调度器 -->  
  34. <bean id="sessionValidationScheduler"  
  35.     class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler">  
  36.     <property name="sessionValidationInterval" value="1800000" />  
  37.     <property name="sessionManager" ref="sessionManager" />  
  38. </bean>  
  39.   
  40. <!-- 会话管理器 -->  
  41. <bean id="sessionManager"  
  42.     class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">  
  43.     <property name="globalSessionTimeout" value="1800000" />  
  44.     <property name="deleteInvalidSessions" value="true" />  
  45.     <property name="sessionValidationSchedulerEnabled" value="true" />  
  46.     <property name="sessionValidationScheduler" ref="sessionValidationScheduler" />  
  47.     <property name="sessionDAO" ref="sessionDAO" />  
  48.     <property name="sessionIdCookieEnabled" value="true" />  
  49.     <property name="sessionIdCookie" ref="sessionIdCookie" />  
  50. </bean>  
  51.   
  52. <bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory" />  
  53. <!-- 安全管理器 -->  
  54. <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  55.     <property name="realm" ref="casRealm" />  
  56.     <property name="sessionManager" ref="sessionManager" />  
  57.     <property name="cacheManager" ref="cacheManager" />  
  58.     <property name="rememberMeManager" ref="rememberMeManager" />  
  59.     <property name="subjectFactory" ref="casSubjectFactory" />  
  60. </bean>  
  61.   
  62. <!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) -->  
  63. <bean  
  64.     class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  65.     <property name="staticMethod"  
  66.         value="org.apache.shiro.SecurityUtils.setSecurityManager" />  
  67.     <property name="arguments" ref="securityManager" />  
  68. </bean>  
  69.   
  70. <bean id="casFilter" class="org.apache.shiro.cas.CasFilter">  
  71.     <property name="failureUrl" value="/casFailure.jsp" />  
  72. </bean>  
  1. <pre name="code" class="html"><bean id="casFilter" class="org.apache.shiro.cas.CasFilter">  
  2.         <property name="failureUrl" value="/casFailure.jsp" />  
  3.     </bean>  
  4.   
  5.     <bean id="formAuthenticationFilter"  
  6.         class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter" />  
  1. <!-- Shiro生命周期处理器-->  
  2.     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />  




以上基本完成 在spring下 shiro与cas的整合 

启动tomcat,访问 client1 将会跳转到cas认证中心,认证通过将自动跳转的 client1的首页! 多个client 与上类似!


下一篇讲多点登出与 相关补充

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多