日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cas5.3.2单点登录-单点登出(十一)

發布時間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cas5.3.2单点登录-单点登出(十一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址,轉載請注明出處:?https://blog.csdn.net/qq_34021712/article/details/81515317?? ???王賽超?

既然有單點登錄,肯定就要有登出,之前的整合都是只針對了登錄,對登出并沒有關注,今天我們就來講講登出。

關于單點登出原理,參考博客:

https://blog.csdn.net/u010588262/article/details/80201983
https://blog.csdn.net/gdsgdh308227363/article/details/80446168

參數說明

參考官網地址
https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#logout
官網共給出了以下幾個屬性值:

#配置單點登出 #配置允許登出后跳轉到指定頁面 cas.logout.followServiceRedirects=false #跳轉到指定頁面需要的參數名為 service cas.logout.redirectParameter=service #登出后需要跳轉到的地址,如果配置該參數,service將無效。 cas.logout.redirectUrl=https://www.taobao.com #在退出時是否需要 確認退出提示 true彈出確認提示框 false直接退出 cas.logout.confirmLogout=true #是否移除子系統的票據 cas.logout.removeDescendantTickets=true #禁用單點登出,默認是false不禁止 #cas.slo.disabled=true #默認異步通知客戶端,清除session #cas.slo.asynchronous=true

cas 默認登出后默認會跳轉到CASServer的登出頁,若想跳轉到其它資源,可在/logout的URL后面加上service=jumpurl,例如:https://server.cas.com:8443/cas/logout?service=https://www.github.com
但默認servcie跳轉不會生效,需要在 cas服務端的application.properties添加cas.logout.followServiceRedirects=true
這個參數也不一定非要叫 service, 可以通過cas.logout.redirectParameter 來修改它。
另外,默認退出的時候沒有任何提示,直接就退出了,若想要有彈出提示,需要添加as.logout.confirmLogout=true
再另外,有一個cas.logout.redirectUrl的屬性,可以配置默認登出之后跳轉到的連接,若 配置該屬性,service參數將無效。就算傳了service參數,也是走的該頁面,所以我們不需要配置此參數。
如果配置了cas.slo.disabled=true 將禁用單點登出。調用登出將無效。

配置過程

服務端配置

application.properties添加以下屬性
#配置允許登出后跳轉到指定頁面 cas.logout.followServiceRedirects=true #跳轉到指定頁面需要的參數名為 service cas.logout.redirectParameter=service #在退出時是否需要 確認一下 true確認 false直接退出 cas.logout.confirmLogout=true #是否移除子系統的票據 cas.logout.removeDescendantTickets=true

客戶端配置

可以直接在客戶端的登出連接寫成服務端的登出地址,不過我沒有這樣做。
我打算客戶端寫一個UserController,在各自的系統點擊登出,先進入本服務的后臺方法,在該方法中重定向到服務端的登出地址。

UserController.java
package com.wangsaichao.cas.controller;import com.wangsaichao.cas.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;/*** @author: wangsaichao* @date: 2018/8/1* @description: 用戶相關操作controller*/ @Controller public class UserController {@Autowiredprivate UserService userService;@RequestMapping("insert")public String insert(String username){userService.insert(username);return "result";}/*** 跳轉到默認頁面* @param session* @return*/@RequestMapping("/logout1")public String loginOut(HttpSession session){session.invalidate();//這個是直接退出,走的是默認退出方式return "redirect:https://server.cas.com:8443/cas/logout";}/*** 跳轉到指定頁面* @param session* @return*/@RequestMapping("/logout2")public String loginOut2(HttpSession session){session.invalidate();//退出登錄后,跳轉到退成成功的頁面,不走默認頁面return "redirect:https://server.cas.com:8443/cas/logout?service=http://app1.cas.com:8081";}}

注意:每個退出方法內都有一個session.invalidate();在點擊退出的時候,銷毀當前服務的session,如果沒有配置這一行代碼,你會發現,點擊退出之后,還需要刷新一下連接才能重新跳轉回登錄頁。

index.jsp

為了方便測試,在index.jsp添加兩種退出方式的連接,完整代碼如下:

<%@page contentType="text/html" %> <%@page pageEncoding="UTF-8" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.util.List" %> <%@ page import="org.jasig.cas.client.authentication.AttributePrincipal" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>CAS Example Java Web App</title> </head> <body><h1>當前為客戶端1</h1> <h2><a href="http://app1.cas.com:8081/">客戶端1</a></h2> <h2><a href="http://app2.cas.com:8082/">客戶端2</a></h2><a href="<%=request.getContextPath() %>/logout1" title="Click here to log out">退出系統(方式1:跳轉到默認頁)</a> <a href="<%=request.getContextPath() %>/logout2" title="Click here to log out">退出系統(方式2:跳轉到指定頁)</a> <p>A sample web application that exercises the CAS protocol features via the Java CAS Client.</p> <hr><p><b>Authenticated User Id:</b> <a href="logout.jsp" title="Click here to log out"><%= request.getRemoteUser() %> </a></p><%if (request.getUserPrincipal() != null) {AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();final Map attributes = principal.getAttributes();if (attributes != null) {Iterator attributeNames = attributes.keySet().iterator();out.println("<b>Attributes:</b>");if (attributeNames.hasNext()) {out.println("<hr><table border='3pt' width='100%'>");out.println("<th colspan='2'>Attributes</th>");out.println("<tr><td><b>Key</b></td><td><b>Value</b></td></tr>");for (; attributeNames.hasNext(); ) {out.println("<tr><td>");String attributeName = (String) attributeNames.next();out.println(attributeName);out.println("</td><td>");final Object attributeValue = attributes.get(attributeName);if (attributeValue instanceof List) {final List values = (List) attributeValue;out.println("<strong>Multi-valued attribute: " + values.size() + "</strong>");out.println("<ul>");for (Object value : values) {out.println("<li>" + value + "</li>");}out.println("</ul>");} else {out.println(attributeValue);}out.println("</td></tr>");}out.println("</table>");} else {out.print("No attributes are supplied by the CAS server.</p>");}} else {out.println("<pre>The attribute map is empty. Review your CAS filter configurations.</pre>");}} else {out.println("<pre>The user principal is empty from the request object. Review the wrapper filter configuration.</pre>");} %></body> </html>

測試

1.先訪問任意一個客戶端登錄
2.然后復制地址,打開另一個頁面,讓兩個頁面是不同的客戶端
3.在任意一個客戶端點擊退出,刷新另一個服務的網頁。

總結

以上是生活随笔為你收集整理的cas5.3.2单点登录-单点登出(十一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。