Spring security整合CAS单点登出的相关配置

首先是CAS单点登出的基本功能

先引入spring-security-cas-client这个maven依赖。


此处照搬spring的配置 spring-security.xml

首先是CAS单点登出的基本功能



先引入spring-security-cas-client这个maven依赖。


此处照搬spring的配置 spring-security.xml
<security:http entry-point-ref="casEntryPoint">
...
<!-- 经测试该配置并没有什么用……随便写个URL就好-->
<security:logout logout-success-url="/cas-logout.jsp"/> 


<security:custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
<security:custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
</security:http>
<!-- This filter handles a Single Logout Request from the CAS Server -->
<bean id="singleLogoutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter"/>


<!-- This filter redirects to the CAS Server to signal Single Logout should be performed -->
<bean id="requestSingleLogoutFilter"
class="org.springframework.security.web.authentication.logout.LogoutFilter">
<constructor-arg value="https://IP:端口/CAS项目名称/logout"/> <!--这里是登出时目标CAS server的配置 @注1-->
<constructor-arg>
<bean class=
"org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
</constructor-arg>
<property name="filterProcessesUrl" value="/logout/cas"/> <!--这是client登出时的URL,可以自行配置 @注2--> 
</bean>
然后是web.xml
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
</listener-class>
</listener>
其实一般来讲,前面两个配置在开发项目的时候大多早就配置好了,也就只有最后的listener是重要的配置。


注1:由于 logout  标签指定的  logout-success-url  无效,所以如果想要登出后返回client需要修改该配置


注2 :  这里就是client登出按钮的url,比如将 value配置成 /logout ,则登出的连接为:<a href="./logout">登出</a>


接下来,我们会发现CAS server 登出之后一直保持在 登出页面不动,并未返回我们的项目(client),所以还需要一些配置:


首先是修改 CAS server的 cas-servlet.xml


<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction"
        p:servicesManager-ref="servicesManager"
        p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>


将cas.logout.followServiceRedirects 由false改成true


然后就像 注1提到的,修改
<bean id="requestSingleLogoutFilter"
    class="org.springframework.security.web.authentication.logout.LogoutFilter">
    <constructor-arg value="https://IP:端口/CAS项目名称/logout"/> <constructor-arg>
        <bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
    </constructor-arg>
<property name="filterProcessesUrl" value="/logout/cas"/> 
</bean>
 
红字的部分,在后面加上"?service=https://client域名或IP:端口/项目名称/...."


例如:https://localhost:8443/cas/logout?service=https://localhost:9443/casclient/web/index.html


这样在登出时就能返回到相应的页面了


PS:本文使用的是spring-security 4.0.1的版本,CAS server版本为4.0.0
同时,文中提到的所有链接,是采用http还是https均根据各自需求自行选择


你可能感兴趣的:(Spring security整合CAS单点登出的相关配置)