cas服务器配置
进行单点退出时,需要通过cas服务器的/logout路径执行退出,以便cas服务器清除对当前session的保持,并通知其他的应用程序用户已经退出。默认情况下,cas服务器执行退出之后,会转向自带的一个退出成功页面,而在实际的项目中,一般都不会使用这个默认的页面,所以需要对cas的logoutController进行修改,启用它的退出转向。这样,在退出时,只要在url后面增加service参数指定退出之后的跳转页面,浏览器就会转向该跳转页面。
对cas-servlet.xml进行修改,找到logoutController,将属性followServiceRedirects的值修改为true。
<bean id="logoutController" class="org.jasig.cas.web.LogoutController" p:centralAuthenticationService-ref="centralAuthenticationService" p:logoutView="casLogoutView" p:followServiceRedirects="true" p:warnCookieGenerator-ref="warnCookieGenerator" p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator" />
客户端的测试页面index.jsp中增加退出链接
<body> 首页,当前登录用户是:<%=session.getAttribute("User_Info") %> <br /> <a href="http://localhost:8080/cas/logout?service=http://localhost:8081/cas-client1">退出</a> </body>
对客户端cas-client2进行相应的修改。
客户端的web.xml中增加单点退出的过滤器和监听器
在前面的单点登录中,已经增加过了过滤器和监听器,不再描述。需要注意的是,单点退出的过滤器需要配置在其他过滤器之前。
测试
重新启动cas-server、cas-client1和cas-client2进行测试。
首先使用http://localhost:8081/cas-client1进行登录,登录之后的页面如下:
在同一浏览器的新选项卡中输入cas-client2的地址http://localhost:8082/cas-client2,此时能正常访问到受保护的index.jsp。
点击这里的“退出”链接,可以看到浏览器又跳转到了cas的登录页面。这里由于退出链接的service地址指向的是http://localhost:8081/cas-client1,而该路径是受安全保护的,所以又跳转到了cas的登录页面。
此时,对cas-client2的页面进行刷新,浏览器也跳转到了cas的登录页面,单点退出测试成功。