亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot集成cas5.3如何實現sso單點登錄

發布時間:2022-03-03 15:15:43 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

這篇文章主要介紹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服務端部署

地址: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單點登錄”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳浦县| 滨海县| 汽车| 阜新市| 正定县| 寻乌县| 成都市| 鲁山县| 成武县| 泗阳县| 靖远县| 维西| 湛江市| 抚顺市| 广汉市| 拜泉县| 汶川县| 深州市| 汤阴县| 堆龙德庆县| 平湖市| 亚东县| 襄汾县| 泰宁县| 霞浦县| 华安县| 登封市| 巩义市| 阿拉善右旗| 康马县| 江孜县| 元谋县| 开封县| 邢台县| 丹棱县| 上高县| 桓仁| 鄄城县| 阿克陶县| 米脂县| 寿阳县|