激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot 集成cas5.3 實現sso單點登錄詳細流程

springboot 集成cas5.3 實現sso單點登錄詳細流程

2022-02-25 00:57張童瑤 Java教程

SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。單點登錄是目前比較流行的企業業務整合的解決方案之一,本文給大家介紹springboot 集成cas5.3 實現sso單點登錄功能,感興趣的朋友一起看看

什么是單點登錄

單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

我們目前的系統存在諸多子系統,而這些子系統是分別部署在不同的服務器中,那么使用傳統方式的session是無法解決的,我們需要使用相關的單點登錄技術來解決。

SSO單點登錄訪問流程主要有以下步驟:

  • 訪問服務:SSO客戶端發送請求訪問應用系統提供的服務資源。
  • 定向認證:SSO客戶端會重定向用戶請求到SSO服務器。
  • 用戶認證:用戶身份認證。
  • 發放票據:SSO服務器會產生一個隨機的Service Ticket。
  • 驗證票據:SSO服務器驗證票據Service Ticket的合法性,驗證通過后,允許客戶端訪問服務。
  • 傳輸用戶信息:SSO服務器驗證票據通過后,傳輸用戶認證結果信息給客戶端。

springboot 集成cas5.3 實現sso單點登錄詳細流程
(作者補充:其實簡單來說,cas就是中央認證服務,就是單點登錄,單點登錄簡稱為sso!)

cas服務端部署

地址:https://github.com/apereo/cas-overlay-template/tree/5.3
1、解壓下載的zip壓縮包
2、解壓后使用maven命令打包

mvn package

3、把target下生成的war包重命名為cas.war放到tomcat下
4、啟動tomcat
5、找到解壓的文件

由于cas默認使用的是基于https協議,需要改為兼容使用http協議,打開對應你的目錄文件:

D:\tomcat8\webapps\cas\WEB-INF\classes\application.properties

修改application.properties文件,添加下面配置,使用http

#使用http協議
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

#由于https協議默認使用的端口為8443,還需我們修改為tomcat的8080端口
server.port=8080

修改HTTPSandIMAPS-10000001.json文件

D:\tomcat8\webapps\cas\WEB-INF\classes\services目錄下的HTTPSandIMAPS-10000001.json

把原來的serviceId內容改成如下

"serviceId" : "^(https|http|imaps)://.*",

兼容http修改完畢。

修改配置中的登錄用戶名密碼

cas.authn.accept.users=yyh::123456

cas服務器端搭建完畢,重啟tomcat 進行測試,在瀏覽器中輸入下面地址,進行訪問

http://localhost:8080/cas/login

springboot 集成cas5.3 實現sso單點登錄詳細流程
springboot 集成cas5.3 實現sso單點登錄詳細流程
springboot 集成cas5.3 實現sso單點登錄詳細流程

服務端就已經搭好了,并且可以通過登錄退出了。

 

cas客戶端搭建

在新建的springboot項目的pom.xml添加如下依賴(匹配對應的版本)

<dependency>
  <groupId>net.unicon.cas</groupId>
  <artifactId>cas-client-autoconfig-support</artifactId>
  <version>2.3.0-GA</version>
</dependency>

在resources下新建application.properties

server.port=8088
#cas服務端的地址
cas.server-url-prefix=http://localhost:8080/cas
#cas服務端的登錄地址
cas.server-login-url=http://localhost:8080/cas/login
#當前服務器的地址(客戶端)
cas.client-host-url=http://localhost:8081
#Ticket校驗器使用Cas30ProxyReceivingTicketValidationFilter
cas.validation-type=cas3

Application啟動類上添加注解

import net.unicon.cas.client.configuration.EnableCasClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//啟用cas
@EnableCasClient
@SpringBootApplication
public class CasClient2Application {

  public static void main(String[] args) {
      SpringApplication.run(CasClient2Application.class, args);
  }

}

第一個客戶端的controller

import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.validation.Assertion;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

import static org.jasig.cas.client.util.AbstractCasFilter.CONST_CAS_ASSERTION;

@RestController
public class controller {

  @RequestMapping("/sso-test1")
  public String test1(HttpSession session){

      Assertion assertion = (Assertion)session.getAttribute(CONST_CAS_ASSERTION);
      AttributePrincipal principal = assertion.getPrincipal();
      String loginName = principal.getName();

      return "sso-test1,當前登錄賬戶"+loginName;
  }
}

一個客戶端就添加好了,添加另一個客戶端出端口其他基本也是一樣

第二個客戶端的controller

import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.validation.Assertion;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

import static org.jasig.cas.client.util.AbstractCasFilter.CONST_CAS_ASSERTION;

@RestController
public class controller {

  @RequestMapping("/sso-test2")
  public String test1(HttpSession session){

      Assertion assertion = (Assertion)session.getAttribute(CONST_CAS_ASSERTION);
      AttributePrincipal principal = assertion.getPrincipal();
      String loginName = principal.getName();
      return "sso-test222222,當前登錄賬戶"+loginName;
  }
}

效果

在沒有登錄的情況下訪問 http://localhost:8081/sso-test1

springboot 集成cas5.3 實現sso單點登錄詳細流程

直接跳到了登錄界面,并且把回調地址也帶上了

訪問第二個客戶端 http://localhost:8082/sso-test2

springboot 集成cas5.3 實現sso單點登錄詳細流程

跟第一個也是一樣,這次我們隨便登錄一個

springboot 集成cas5.3 實現sso單點登錄詳細流程

登錄后,執行了回調接口,刷新一下第一個客戶端的地址

springboot 集成cas5.3 實現sso單點登錄詳細流程

也登錄成功了。

 

配置統一登出

添加登出接口controller

/**
* 退出 后自動重定向自定義接口
* @param request
* @return
*/
@RequestMapping("/system/logout1")
public String logout1(HttpServletRequest request) {
  HttpSession session = request.getSession();
  session.invalidate();
  return "redirect:http://localhost:8080/cas/logout?service=http://localhost:8081/system/logoutSuccess";

}

/**
* 退出成功頁
* @return
*/
@RequestMapping("/system/logoutSuccess")
@ResponseBody
public String logoutSuccess() {
  return "test1成功退出!";
}

設置cas認證中心允許重定向跳轉

打開你的cas認證中心里的 application.properties 文件,添加如下配置

#退出登錄后允許跳轉
cas.logout.followServiceRedirects=true

新建config配置文件

import org.jasig.cas.client.authentication.AuthenticationFilter;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
import org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.EventListener;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class config {

  //cas認證服務中心地址
  private static final String CAS_SERVER_URL_PREFIX = "http://localhost:8080/cas/";

  //cas認證服務中心   系統登錄地址
  private static final String CAS_SERVER_URL_LOGIN = "http://localhost:8080/cas/login";

  //你自己的客戶端1的地址
  private static final String SERVER_NAME = "http://localhost:8081/";

  /**
   * description: 登錄過濾器
   * @param: []
   * @return: org.springframework.boot.web.servlet.FilterRegistrationBean
   */
  @Bean
  public FilterRegistrationBean filterSingleRegistration() {
      FilterRegistrationBean registration = new FilterRegistrationBean();
      registration.setFilter(new SingleSignOutFilter());
      // 設定匹配的路徑
      registration.addUrlPatterns("/*");
      Map<String,String> initParameters = new HashMap<String, String>();
      initParameters.put("casServerUrlPrefix", CAS_SERVER_URL_PREFIX);
      registration.setInitParameters(initParameters);
      // 設定加載的順序
      registration.setOrder(1);
      return registration;
  }


  /**
   * description:過濾驗證器
   *     * @param: []
   * @return: org.springframework.boot.web.servlet.FilterRegistrationBean
   */
  @Bean
  public FilterRegistrationBean filterValidationRegistration() {
      FilterRegistrationBean registration = new FilterRegistrationBean();
      registration.setFilter(new Cas30ProxyReceivingTicketValidationFilter());
      // 設定匹配的路徑
      registration.addUrlPatterns("/*");
      Map<String,String>  initParameters = new HashMap<String, String>();
      initParameters.put("casServerUrlPrefix", CAS_SERVER_URL_PREFIX);
      initParameters.put("serverName", SERVER_NAME);
      initParameters.put("useSession", "true");
      registration.setInitParameters(initParameters);
      // 設定加載的順序
      registration.setOrder(1);
      return registration;
  }


  /**
   * description:授權過濾器
   * @param: []
   * @return: org.springframework.boot.web.servlet.FilterRegistrationBean
   */
  @Bean
  public FilterRegistrationBean filterAuthenticationRegistration() {
      FilterRegistrationBean registration = new FilterRegistrationBean();
      registration.setFilter(new AuthenticationFilter());
      // 設定匹配的路徑
      registration.addUrlPatterns("/*");

      Map<String,String>  initParameters = new HashMap<String, String>();
      initParameters.put("casServerLoginUrl", CAS_SERVER_URL_LOGIN);
      initParameters.put("serverName", SERVER_NAME);


      //設置忽略  退出登錄不用登錄
      initParameters.put("ignorePattern", "/system/*");

      registration.setInitParameters(initParameters);
      // 設定加載的順序
      registration.setOrder(1);
      return registration;
  }


  /**
   * wraper過濾器
   * @return
   */
  @Bean
  public FilterRegistrationBean filterWrapperRegistration() {
      FilterRegistrationBean registration = new FilterRegistrationBean();
      registration.setFilter(new HttpServletRequestWrapperFilter());
      // 設定匹配的路徑
      registration.addUrlPatterns("/*");
      // 設定加載的順序
      registration.setOrder(1);
      return registration;
  }

  /**
   * 添加監聽器
   * @return
   */
  @Bean
  public ServletListenerRegistrationBean<EventListener> singleSignOutListenerRegistration(){
      ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<EventListener>();
      registrationBean.setListener(new SingleSignOutHttpSessionListener());
      registrationBean.setOrder(1);
      return registrationBean;
  }
}

客戶端2跟客戶端1的大似相同,這樣就可以實現登出一個系統,所有系統全部登出。

到此這篇關于springboot 集成cas5.3 實現sso單點登錄詳細流程的文章就介紹到這了,更多相關springboot sso單點登錄內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/u014641168/article/details/120864239

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美激情精品久久久久久久久久 | 欧美日韩精品一区二区三区不卡 | 精品国产一区二区亚洲人成毛片 | 亚洲精品 在线播放 | 综合精品一区 | 九九综合九九 | 国产人成免费爽爽爽视频 | 色播视频在线播放 | chinesexxx少妇露脸 | 最新国产毛片 | 麻豆视频免费网站 | 亚洲成人综合网站 | 国产黄网 | av在线免费播放网站 | 日日噜噜噜夜夜狠狠久久蜜桃 | 黄色免费av网站 | 88xx成人永久免费观看 | 成人国产精品齐天大性 | 91www成人久久 | 蜜桃久久一区二区三区 | 国产在线免| 亚洲国产精品高潮呻吟久久 | 久久综合给合久久狠狠狠97色69 | 日韩中字在线 | 国产精品久久久久久一区二区三区 | 黄色片网站免费 | 天天骑夜夜操 | 免费网站看v片在线a | 欧美日韩在线免费观看 | 亚洲精品永久视频 | av免费在线播放网址 | 91女上位 在线播放 bt 自拍 另类 综合 欧美 | 精品中文字幕视频 | gril hd| 亚洲成人涩涩 | 国产一区二区国产 | 欧美中文在线 | 国内精品视频饥渴少妇在线播放 | 亚洲二区三区在线 | 一区二区精品视频在线观看 | 日韩字幕在线 |