CAS 入門實戰(2)--服務端安裝

来源:https://www.cnblogs.com/wuyongyin/archive/2022/05/08/16034502.html
-Advertisement-
Play Games

一、背景介紹 最近幾天,谷愛凌在冬奧會賽場上奪得一枚寶貴的金牌,為中國隊貢獻了自己的榮譽! 針對此熱門事件,我用Python的爬蟲和情感分析技術,針對小破站的彈幕數據,分析了眾網友彈幕的輿論導向,下麵我們來看一下,是如何實現的分析過程。 二、代碼講解-爬蟲部分 2.1 分析彈幕介面 首先分析B站彈幕 ...


本文主要介紹 CAS 服務端的安裝,使用到的軟體版本:JDK 1.8.0_191、Tomcat 8.5.76、CAS 5.3.16。

1、單機安裝

1.1、生成部署包

通過官方提供的 cas-overlay-template(https://github.com/apereo/cas-overlay-template/tree/5.3) 模板來生成部署包。

先 clone 項目到本地:

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

執行打包命令:

build.cmd package

命令執行完成之後會在 target 目錄下生成 cas 的 web 應用及 cas.war 的包。linux 環境可以使用 build.sh 腳本。

1.2、生成密鑰庫

CAS 預設需要使用 Https 來訪問,可使用 Java 的 keytool 工具來生成密鑰庫,然後使用該密鑰庫在 Tomcat 中配置 SSL。

D:\tmp>keytool -genkeypair -alias cas-tomcat -keyalg RSA -keystore casServer.keystore

1.3、Tomcat 中配置 SSL

在 conf/server.xml 中註釋掉原來的 Connector,新增一個 Connector:

<!--Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" /-->

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
       maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
      <Certificate certificateKeystoreFile="d:/tmp/casServer.keystore"
                   certificateKeystoreType="JKS" certificateKeystorePassword="123456" />
  </SSLHostConfig>
</Connector>

1.4、修改日誌目錄

修改 WEB-INF\classes\log4j2.xml 文件中的日誌文件保存目錄:

<Properties>
    <Property name="baseDir">d:/tmp/logs</Property>
</Properties>

1.5、部署應用

把 1.1 生成的 cas 應用目錄或 cas.war 拷貝到 Tomcat 的 webapps 目錄下並啟動 Tomcat;啟動完成後訪問應用:https://127.0.0.1:8443/cas,預設用戶名密碼為:casuser/Mellon

1.6、查看 Dashboard

目前情況下是沒有許可權查看 Dashboard 的,需要在 WEB-INF\classes\application.properties 中放開許可權:

#修改如下配置,開啟監控端點
cas.monitor.endpoints.enabled=true
cas.monitor.endpoints.sensitive=false

#新增如下配置,設置能訪問的ip,.+ 表示任意ip
cas.adminPagesSecurity.ip=127.0.0.1

修改完後重啟 Tomcat,重新登錄:

1.7、JDBC 認證登錄

預設情況下用戶信息配置在 WEB-INF\classes\application.properties 中:

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

CAS 支持通過 JDBC 方式認證登錄,以滿足實際生成的需要。

1.7.1、引入 JDBC 的組件

在 clone 項目的 pom.xml 文件中增加如下配置(紅字部分):

<dependencies>
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-webapp${app.server}</artifactId>
        <version>${cas.version}</version>
        <type>war</type>
        <scope>runtime</scope>
    </dependency>
    <!--
    ...Additional dependencies may be placed here...
    -->
    <dependency>
        <groupId>org.apereo.cas</groupId>
      <artifactId>cas-server-support-jdbc</artifactId>
      <version>${cas.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apereo.cas</groupId>
      <artifactId>cas-server-support-jdbc-drivers</artifactId>
      <version>${cas.version}</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>
</dependencies>

重新打包 build.cmd package,再把應用重新部署到 Tomcat 中。

1.7.2、創建用戶表

個應用系統一般都有用戶表,這一步是不需要的;這裡為了演示創建一個測試的用戶表:

CREATE TABLE `cas_user`  (
  `id` bigint PRIMARY KEY,
  `user_name` varchar(32) NOT NULL COMMENT '用戶名',
  `password` varchar(64) NOT NULL COMMENT '密碼',
  `create_time` datetime COMMENT '創建時間',
  `expired_flag` int(1) NOT NULL DEFAULT 0 COMMENT '是否過期',
  `disabled_flag` int(1) NOT NULL DEFAULT 0 COMMENT '是否有效'
)

並插入測試數據,密碼使用 MD5 加密,這裡密碼為 123456,MD5 加密後用十六進位表示為:e10adc3949ba59abbe56e057f20f883e

insert into cas_user(id,user_name,password,create_time)
values (1,'test','e10adc3949ba59abbe56e057f20f883e',now());

1.7.3、應用中配置資料庫信息

在 WEB-INF\classes\application.properties 中修改配置:

#該行註釋掉
#cas.authn.accept.users=casuser::Mellon

#增加下列配置
#查詢用戶信息的SQL,會把用戶名作為參數傳進來
cas.authn.jdbc.query[0].sql=select * from cas_user where user_name=?
#指定密碼欄位
cas.authn.jdbc.query[0].fieldPassword=password
#指定過期欄位
cas.authn.jdbc.query[0].fieldExpired=expired_flag
#指定是否可用欄位
cas.authn.jdbc.query[0].fieldDisabled=disabled_flag

cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
cas.authn.jdbc.query[0].url=jdbc:mysql://10.49.196.10:3306/cas?useUnicode=true&characterEncoding=UTF-8&useSSL=false
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=123456

#預設加密策略,NONE 不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

重啟 Tomcat,使用 test/123456 登錄 CAS 系統。

1.8、使用 Http 方式登錄

由於 Https 需要配置證書,比較麻煩,也不方便 CAS 客戶端和 CAS 服務端的通信,可以修改為使用 Http 訪問系統。

1.8.1、修改 HTTPSandIMAPS-10000001.json 文件

修改 WEB-INF\classes\services\HTTPSandIMAPS-10000001.json,增加 http 協議:

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|http|imaps)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

1.8.2、修改 application.properties 文件

修改 WEB-INF\classes\application.properties 文件,增加如下配置:

cas.tgc.secure=false
cas.warningCookie.secure=false
cas.serviceRegistry.initFromJson=true

1.8.3、Tomcat 改回 Http 協議

刪除原來 Https 的配置,複原原始配置:

<Connector port="8080" protocol="HTTP/1.1"
     connectionTimeout="20000"
     redirectPort="8443" />

重啟 Tomcat,通過 Http 協議訪問 CAS:

2、集群安裝

2.1、集群架構

官方推薦的集群架構如下:

2.2、集群規劃

ip 用途
10.49.196.10 CAS 服務端
10.49.196.11 CAS 服務端
10.49.196.12 nginx,redis

這裡 redis 使用單機版,實際應用中可以使用 redis 的哨兵模式,防止單點故障。

2.3、票據持久化

預設票據保存在記憶體中,集群中個節點無法共用;CAS 提供多種票據持久化的方法,如:JMS、JPA、MongoDB、Redis、Cassandra 等等,這裡使用 Redis 來持久票據。

2.3.1、引入依賴

在 cas-overlay-template 的 pom.xml 文件中引入相關依賴:

<profile>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <id>default</id>
    <dependencies>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-webapp${app.server}</artifactId>
            <version>${cas.version}</version>
            <type>war</type>
            <scope>runtime</scope>
        </dependency>
        ......
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-redis-ticket-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>
    </dependencies>
</profile>

重新打包 build.cmd package,再把應用重新部署到 Tomcat 中。

2.3.2、配置 Redis 信息

在 WEB-INF\classes\application.properties 中增加配置:

cas.ticket.registry.redis.host=10.49.196.12
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.usePool=true

詳細說明可參考官方文檔:https://apereo.github.io/cas/6.5.x/ticketing/Redis-Ticket-Registry.html (5.3 版本的文檔已經沒有了,這裡使用 6.5 版本的文檔);配置完後,重啟應用即可。

2.4、Session 持久化(可選)

Session 持久化用於 CAS 實例之間共用會話狀態和會話故障轉移;這一步是可選的,不建議使用,因為用戶 CAS 會話往往是短期的,並且體驗更像是請求-響應風格,而不是面向會話的。

2.4.1、引入依賴

 在 cas-overlay-template 的 pom.xml 文件中引入相關依賴:

<profile>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <id>default</id>
    <dependencies>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-webapp${app.server}</artifactId>
            <version>${cas.version}</version>
            <type>war</type>
            <scope>runtime</scope>
        </dependency>
        ......
        <dependency>
             <groupId>org.apereo.cas</groupId>
             <artifactId>cas-server-webapp-session-redis</artifactId>
             <version>${cas.version}</version>
        </dependency>
    </dependencies>
</profile>

重新打包 build.cmd package,再把應用重新部署到 Tomcat 中。

2.4.2、配置 Session 持久信息

在 WEB-INF\classes\application.properties 中增加配置:

cas.webflow.session.storage=true
spring.session.store-type=redis
spring.redis.host=10.49.196.12
spring.redis.port=6379

詳細說明可參考官方文檔:https://apereo.github.io/cas/6.5.x/webflow/Webflow-Customization-Sessions.html (5.3 版本的文檔已經沒有了,這裡使用 6.5 版本的文檔);配置完後,重啟應用即可。

2.5、代理配置

這裡使用 Nginx 作為代理伺服器,配置如下:

http {
    ......

    upstream cas {
        server 10.49.196.10:8080 weight=1;
        server 10.49.196.10:8081 weight=1;
        ip_hash;
    }
    server {
        listen       8080;
        server_name  localhost;
        ......

        location /cas {
            proxy_pass http://cas/cas;
        }
    }
}

啟動 Nginx 後,就可以通過 http://10.49.196.12:8080/cas 來訪問 CAS 了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 函數的定義和使用 def test(x): # x代表形參 ''' 2*x+1 :param x:整形數字 :return:返回計算結果 ''' y = 2*x+1 return y p = test(3) # test()表示運行名為test函數,3代表實參,給x進行賦值 print(p) 函數的 ...
  • 介紹瞭如何在程式代碼中嵌入IPython用於調試,並分析了優點與不足 ...
  • C++進階-3-6-map/multimap容器 1 #include<iostream> 2 #include<map> 3 using namespace std; 4 5 // map / multimap容器 6 7 void printMap(map<int, int>& m) { 8 f ...
  • 模塊與包 一、Python 模塊簡介 在開發過程中,隨著程式代碼越寫越多,在一個文件里代碼就會越來越長,越來越不容易維護。 後面我們學習了函數,知道函數是實現一項或多項功能的一段程式,這樣就更方便我們重覆使用代碼。 緊接著,我們有學了類,類可以封裝方法和變數(屬性)。這樣就更方便我們維護代碼了。 我 ...
  • 爬取圖片實例 •selenium+win32爬取圖片 Python學習交流Q群:903971231##### """爬取圖片""" import os import threading import time from ctypes import windll import requests imp ...
  • C++進階-3-5-set/multiset容器 1 #include<iostream> 2 #include<set> 3 using namespace std; 4 5 // set/multiset容器 6 7 void printSet(set<int>& s) { 8 9 for (s ...
  • 還記得Java 16中的instanceof增強 嗎? 通過下麵這個例子再回憶一下: Map<String, Object> data = new HashMap<>(); data.put("key1", "aaa"); data.put("key2", 111); if (data.get("k ...
  • Matplotlib 教程 Matplotlib 是 Python 的繪圖庫,它能讓使用者很輕鬆地將數據圖形化,並且提供多樣化的輸出格式。 Matplotlib 可以用來繪製各種靜態,動態,互動式的圖表。 Matplotlib 是一個非常強大的 Python 畫圖工具,我們可以使用該工具將很多數據通 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...