<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot 基于 CAS 實(shí)現(xiàn)單點(diǎn)登錄登出

          共 7645字,需瀏覽 16分鐘

           ·

          2020-10-13 05:35

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|??d0usr

          來(lái)源 |? urlify.cn/uIfUV3

          66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          1、下載 CAS 5.3 源碼:

          git clone https://github.com/apereo/cas-overlay-template.git

          由于以上命令會(huì)拷貝 CAS 的最新版本,如需切換到歷史版本,可執(zhí)行如下操作:

          1)cd 到該項(xiàng)目下;

          2)git log 查看提交記錄,找到想要的提交記錄,粘貼對(duì)應(yīng)的哈希值;

          3)執(zhí)行 git checkout 哈希值;

          這時(shí)本地的代碼就會(huì)變成你想要的那個(gè)版本的代碼。

          2、將下載的源碼導(dǎo)入 Idea:

          (1)目錄結(jié)構(gòu)如下(CAS5.3 采用 maven 項(xiàng)目結(jié)構(gòu)):

          (2)打開(kāi) POM.XML 文件,更換 repositories :


          ????

          ????
          ????
          ????????
          ????????????central
          ????????????aliyun?maven
          ????????????http://maven.aliyun.com/nexus/content/groups/public/
          ????????????
          ????????????
          ????????????????true
          ????????????

          ????????????
          ????????????
          ????????????????false
          ????????????

          ????????

          ????


          3、對(duì)源碼進(jìn)行打包:

          打包完成后會(huì)生成一個(gè) target 目錄:

          4、將打包后的 cas 文件夾復(fù)制到 tomcat 的 webapps 目錄下:

          5、修改CAS服務(wù)端配置文件:
          (1)在 cas\WEB-INF\classes 目錄的 application.properties 添加如下的內(nèi)容:

          # 自定義cas 登錄用戶名和密碼為 admin

          #cas.authn.accept.users=casuser::Mellon
          cas.authn.accept.users=admin::admin

          # 兼容 Http 協(xié)議
          cas.tgc.secure=false
          # 開(kāi)啟識(shí)別Json文件,默認(rèn)false
          cas.serviceRegistry.initFromJson=true

          # 允許退出登錄后重定向到其他頁(yè)面
          cas.logout.followServiceRedirects=true

          (2)在 cas\WEB-INF\classes\services 目錄下的 HTTPSandIMAPS-10000001.json:

          修改內(nèi)容如下,即添加http
          "serviceId" : "^(https|http|imaps)://.*",

          6、啟動(dòng) tomcat 查看是否可以啟動(dòng) CAS Server:

          ?

          如上,已成功訪問(wèn) CAS Server 登錄頁(yè)。

          7、 CAS 客戶端配置:

          (1)項(xiàng)目結(jié)構(gòu):

          ?項(xiàng)目結(jié)構(gòu)為 maven 多模塊工程,其中sp-common模塊為公用模塊;sp-member 為會(huì)員模塊;sp-order 為訂單模塊。

          (2)POM.XML 依賴(lài):


          ??net.unicon.cas
          ??cas-client-autoconfig-support
          ??2.1.0-GA

          (3)application.yml 配置:

          1)客戶端 sp-member 模塊配置如下:

          server:
          ??port:?8081

          #?配置?cas?server?信息
          cas:
          ??#?cas服務(wù)端的地址
          ??server-url-prefix:?http://localhost:8080/cas
          ??#?cas服務(wù)端的登錄地址
          ??server-login-url:?http://localhost:8080/cas/login
          ??#?當(dāng)前服務(wù)器的地址(客戶端)
          ??client-host-url:?http://localhost:8081
          ??#?Ticket校驗(yàn)器使用Cas30ProxyReceivingTicketValidationFilter
          ??validation-type:?cas3

          2)客戶端 sp-order 模塊配置如下:

          server:
          ??port:?8082

          #?配置?cas?server?信息
          cas:
          ??#?cas服務(wù)端的地址
          ??server-url-prefix:?http://localhost:8080/cas
          ??#?cas服務(wù)端的登錄地址
          ??server-login-url:?http://localhost:8080/cas/login
          ??#?當(dāng)前服務(wù)器的地址(客戶端)
          ??client-host-url:?http://localhost:8082
          ??#?Ticket校驗(yàn)器使用Cas30ProxyReceivingTicketValidationFilter
          ??validation-type:?cas3

          8、進(jìn)行客戶端測(cè)試:

          (1)客戶端 sp-member模塊配置如下:

          MemberController 類(lèi):

          package?member.controller;

          import?org.springframework.stereotype.Controller;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.ResponseBody;

          import?javax.servlet.http.HttpServletRequest;
          import?javax.servlet.http.HttpSession;

          @Controller
          public?class?MemberController?{

          ????@RequestMapping("/test")
          ????@ResponseBody
          ????public?String?test(HttpServletRequest?request)?{
          ????????return?"member";
          ????}

          ????/**
          ?????*?退出
          ?????*?@param?request
          ?????*?@return
          ?????*/
          ????@RequestMapping("/logout")
          ????public?String?logout(HttpServletRequest?request)?{
          ????????HttpSession?session?=?request.getSession();
          ????????session.invalidate();
          ????????return?"redirect:http://localhost:8080/cas/logout?service=http://localhost:8081/logoutSuccess";

          ????}

          ????/**
          ?????*?退出成功頁(yè)
          ?????*?@return
          ?????*/
          ????@RequestMapping("/logoutSuccess")
          ????@ResponseBody
          ????public?String?logoutSuccess()?{
          ????????return?"member?logoutSuccess";
          ????}

          }

          StartMember8081類(lèi)(啟動(dòng)類(lèi)):

          package?member;

          /**
          ?*?會(huì)員服務(wù)啟動(dòng)類(lèi)
          ?*/
          import?net.unicon.cas.client.configuration.EnableCasClient;
          import?org.jasig.cas.client.authentication.AuthenticationFilter;
          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          import?org.springframework.boot.web.servlet.FilterRegistrationBean;
          import?org.springframework.context.annotation.Bean;

          import?java.util.HashMap;
          import?java.util.Map;

          @EnableCasClient????????//?開(kāi)啟?Cas?Client?注解
          @SpringBootApplication
          public?class?StartMember8081?{

          ????private?static?final?String?CAS_SERVER_URL_LOGIN?=?"http://localhost:8080/cas/login";
          ????private?static?final?String?SERVER_NAME?=?"http://localhost:8081/";

          ????@Bean
          ????public?FilterRegistrationBean?filterAuthenticationRegistration()?{
          ????????FilterRegistrationBean?registration?=?new?FilterRegistrationBean();
          ????????//?AuthenticationFilter??該過(guò)濾器負(fù)責(zé)用戶的認(rèn)證工作
          ????????registration.setFilter(new?AuthenticationFilter());
          ????????//?設(shè)定匹配的路徑
          ????????registration.addUrlPatterns("/*");
          ????????Map?initParameters?=?new?HashMap();
          ????????initParameters.put("casServerLoginUrl",?CAS_SERVER_URL_LOGIN);
          ????????initParameters.put("serverName",?SERVER_NAME);
          ????????//?忽略?/logoutSuccess?的路徑
          ????????initParameters.put("ignorePattern",?"/logoutSuccess/*");
          ????????registration.setInitParameters(initParameters);
          ????????//?設(shè)定加載的順序
          ????????registration.setOrder(1);
          ????????return?registration;
          ????}

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


          }

          (2)客戶端 sp-order 模塊配置如下:

          OrderController類(lèi):

          package?order.controller;

          import?org.springframework.stereotype.Controller;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.ResponseBody;

          import?javax.servlet.http.HttpServletRequest;
          import?javax.servlet.http.HttpSession;

          @Controller
          public?class?OrderController?{

          ????@RequestMapping("/test")
          ????@ResponseBody
          ????public?String?test()?{
          ????????return?"order";
          ????}

          ????/**
          ?????*?退出
          ?????*?@param?request
          ?????*?@return
          ?????*/
          ????@RequestMapping("/logout")
          ????public?String?logout(HttpServletRequest?request)?{
          ????????HttpSession?session?=?request.getSession();
          ????????session.invalidate();
          ????????return?"redirect:http://localhost:8080/cas/logout?service=http://localhost:8082/logoutSuccess";

          ????}

          ????/**
          ?????*?退出成功頁(yè)
          ?????*?@return
          ?????*/
          ????@RequestMapping("/logoutSuccess")
          ????@ResponseBody
          ????public?String?logoutSuccess()?{
          ????????return?"order?logoutSuccess";
          ????}


          }

          StartOrder8082類(lèi)(啟動(dòng)類(lèi)):

          package?order;

          import?net.unicon.cas.client.configuration.EnableCasClient;
          import?org.jasig.cas.client.authentication.AuthenticationFilter;
          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          import?org.springframework.boot.web.servlet.FilterRegistrationBean;
          import?org.springframework.context.annotation.Bean;

          import?java.util.HashMap;
          import?java.util.Map;


          /**
          ?*?訂單服務(wù)啟動(dòng)類(lèi)
          ?*/
          @EnableCasClient????????//?開(kāi)啟?Cas?Client?注解
          @SpringBootApplication
          public?class?StartOrder8082?{

          ????private?static?final?String?CAS_SERVER_URL_LOGIN?=?"http://localhost:8080/cas/login";
          ????private?static?final?String?SERVER_NAME?=?"http://localhost:8082/";

          ????@Bean
          ????public?FilterRegistrationBean?filterAuthenticationRegistration()?{
          ????????FilterRegistrationBean?registration?=?new?FilterRegistrationBean();
          ????????registration.setFilter(new?AuthenticationFilter());
          ????????//?設(shè)定匹配的路徑
          ????????registration.addUrlPatterns("/*");
          ????????Map?initParameters?=?new?HashMap();
          ????????initParameters.put("casServerLoginUrl",?CAS_SERVER_URL_LOGIN);
          ????????initParameters.put("serverName",?SERVER_NAME);
          ????????//?忽略?/logoutSuccess?的路徑
          ????????initParameters.put("ignorePattern",?"/logoutSuccess/*");
          ????????registration.setInitParameters(initParameters);
          ????????//?設(shè)定加載的順序
          ????????registration.setOrder(1);
          ????????System.out.println("init?filter");

          ????????return?registration;
          ????}


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

          (3)測(cè)試訪問(wèn)(會(huì)員業(yè)務(wù)) http://localhost:8081/test 是否會(huì)被攔截:

          如上,會(huì)員服務(wù)接口已被成功攔截,地址重定向了 CAS Server 的登錄頁(yè)面。

          (4)測(cè)試訪問(wèn)(訂單服務(wù)) http://localhost:8082/test 是否會(huì)被攔截:

          如上,訂單服務(wù)接口也成功被攔截。

          (5)測(cè)試當(dāng)一個(gè)客戶端登錄后,另外一個(gè)客戶端是否可以訪問(wèn):

          ?

          ?如上,登錄后成功返回會(huì)員服務(wù)內(nèi)容。

          ?

          如上,刷新剛剛訂單服務(wù)請(qǐng)求地址,也成功返回訂單服務(wù)內(nèi)容。

          (6)測(cè)試當(dāng)一個(gè)客戶端退出后,另外一個(gè)客戶端是否還可以訪問(wèn):

          ?

          如上,先在瀏覽器訪問(wèn) http://localhost:8081/logout 接口,url 重定到 http://localhost:8081/logoutSuccess 接口,即表示會(huì)員服務(wù)已退出。

          這時(shí)再刷新之前兩個(gè)服務(wù)的接口地址,均重定向到了 CAS Server 登錄頁(yè),即實(shí)現(xiàn)了單點(diǎn)登出效果。





          粉絲福利:Java從入門(mén)到入土學(xué)習(xí)路線圖

          ???

          ?長(zhǎng)按上方微信二維碼?2 秒


          感謝點(diǎn)贊支持下哈?

          瀏覽 91
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费的黄色视频网站在线 | 青娱乐欧美国产亚洲自拍 | 久久黄色成人视频 | 精品视频一区二区三区四区 | 久久久久久久久久免费看视频 |