sso+shiro

来源:互联网 发布:java实现rsa算法 编辑:程序博客网 时间:2024/06/07 09:45

之前的文章讲了如何用cas配置单点登录,其中各个子站的web.xml中都有配置cas的各种过滤器 比较麻烦,这一节我们来讲一下cas与shiro的整合。

 

cas服务器和之前的文章配置一样的不用变,现在这是需要在客户端与shiro整合就ok


第一步:添加如下依赖包

<!-- sso+shiro -->


<dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-cas</artifactId>
            <version>${shiro.version}</version>
        </dependency>
         <dependency>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.6</version>
        </dependency>


第二步:在classpath下面添加一个application-shiro.xml 内容如下

ps:其中jdbc.properties中定义了

#sso配置
casServer=https://www.ssomain.com:8443/cas
appServer=http://www.cui.com:8090/cui  //这两个域名都是本地解析为127.0.0.1 因为我都在本地的同一个tomcat中


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd "
    default-lazy-init="true">
    <description>Shiro CAS配置</description>
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="${casServer}/login?service=${appServer}/shiro-cas" />
        <property name="filters">
           <util:map>
              <!-- 添加casFilter到shiroFilter -->
              <entry key="casFilter" value-ref="casFilter"></entry>
           </util:map>
        </property>
        <property name="filterChainDefinitions">
            <value> 
                /shiro-cas = casFilter
                /** = anon
            </value>
        </property>
    </bean>
    <!-- 
      /** = casFilter
    -->
    
    <bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
         <!-- 配置验证错误时的失败页面 -->
        <property name="failureUrl" value="/index.jsp"></property>
         <property name="successUrl" value="/index.jsp" />
    </bean>
    
    <bean id="casRealm" class="org.apache.shiro.cas.CasRealm">  
       <property name="casServerUrlPrefix" value="${casServer}"/>  
        <!-- 客户端的回调地址设置,必须和下面的shiro-cas过滤器拦截的地址一致 -->  
        <property name="casService" value="${appServer}/shiro-cas"/> 
    </bean>  
      
   <!-- 
    <bean id="casRealm" class="com.cicro.iris.service.AuthCasRealm">
       <property name="casServerUrlPrefix" value="${casServer}"></property>
       <property name="casService" value="${sourceUrl}/shiro-cas"></property>
    </bean>


     用户授权信息Cache, 采用EhCache -->
    <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpath:ehcache/ehcache-shiro.xml"/>
    </bean>
    
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!--设置自定义realm -->
        <property name="cacheManager" ref="shiroEhcacheManager" />
        <property name="realm" ref="casRealm" />
    </bean>


    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />


    <!-- securityManager -->
    <bean
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="staticMethod"
            value="org.apache.shiro.SecurityUtils.setSecurityManager" />
        <property name="arguments" ref="securityManager" />
    </bean>


</beans>

第三步:在web.xml中添加如下

  <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <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>、

然后启动tomcat 在浏览器里面输入 http:www.cui.com:8090/cui 就会跳到cas登录页面

在这个过程中遇到各种问题大部分问题都是包冲突 

还有一个问题我需要强调一下就是,登录的时候页面一直报“页面中包含重定向” 最后原因是因为我的配置文件没有加载对 搞了半天很坑爹

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath*:/applicationContext.xml,
    classpath*:/applicationContext-shiro.xml
    </param-value>
    </context-param>

我写成这样了

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath*:/applicationContext.xml,

    </param-value>

 <param-value>
 
    classpath*:/applicationContext-shiro.xml
    </param-value>
    </context-param>

0 0