cas單點登錄搭建

Cas Server下載:http://developer.jasig.org/cas/

  Cas Client下載:http://developer.jasig.org/cas-clients/

  測試環境:

    jdk:java version "1.8.0_60"

    tomcat:apache-tomcat-7.0.65

    mysql:mysql5.5.40

    CAS Server:cas-server-4.0.0-release.zip

    CAS Client:cas-client-3.2.1-release.zip

  此教程是在jdk和tomcat成功安裝的基礎上完成,至于jdk和tomcat的安裝大家可以網上找找資料。好吧,下面入正題。

  一、生成證書

  1、生成證書:

    keytool -genkey -alias castest -keyalg RSA -keystore F:/keys/castest

    生成一個別名為castest的證書。

    此處需要特別注意口令(后續導入導出證書、CAS服務器端均要用到此口類)和“名字與姓氏”(為CAS跳轉域名,否則會報錯)

    

  2、導出證書:

    keytool -export -file F:/keys/castest.crt -alias castest -keystore F:/keys/castest

  3、將證書導入到客戶端JRE中(注意、是導入JRE中),如果security中已經存在cacerts,需要先將其刪除。

    keytool -import -keystore "D:\Program Files\Java\jdk1.8.0_60\jre\lib\security\cacerts" -file F:/keys/castest.crt -alias castest

  二、配置服務器端

  1、從http://developer.jasig.org/cas/上下載cas服務器端cas-server-4.0.0-release.zip,在modules目錄下找到cas-server-webapp-4.0.0.war,將其復制到%TOMCAT_HOME%\webapps下,并將名稱改為cas.war

  2、修改%TOMCAT_HOME%\conf\server.xml文件,去掉此文件83到93行之間的注釋,修改為:

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="F:/keys/castest" <!—生成證書時的路徑,證書名-->
keystorePass="castest" <!—證書密碼-->
maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/>

  3、測試:https://localhost:8443/

  

  點擊繼續瀏覽此網頁

  

  如果此時可以正常訪問,說明證書安裝成功

  https://localhost:8443/cas/login,出現

  

  輸入賬號和密碼

  casuser
  Mellon

  

  此時說明服務器端已經配置成功。可通過https://localhost:8443/cas/logout退出登錄

  三、配置客戶端

  1. 從http://developer.jasig.org/cas-clients/上下載cas-client-3.2.1-release.zip,在modules目錄下找到cas-client-core-3.2.1.jar、commons-logging-1.1.jar復制到項目WEB-INF/lib下

  2. 添加映射域名,在C:\Windows\System32\drivers\etc\hosts文件中添加

    127.0.0.1 sso.castest.com
  3. 創建web項目CasClient,并在項目的web.xml配置過濾器

復制代碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>cas-demo</display-name><!-- ======================== 單點登錄開始 ======================== --><!-- 用于單點退出,該過濾器用于實現單點登出功能,可選配置--><listener><listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class></listener><!-- 該過濾器用于實現單點登出功能,可選配置。 --><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/CasClient/*</url-pattern></filter-mapping><!-- 該過濾器負責用戶的認證工作,必須啟用它 --><filter><filter-name>CASFilter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://sso.castest.com:8443/cas/login</param-value><!--這里的server是服務端的IP--></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8080</param-value></init-param></filter><filter-mapping><filter-name>CASFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 --><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://sso.castest.com:8443/cas/</param-value><!-- 此處必須為登錄url/cas/,帶有任何其它路徑都會報錯,如“https://sso.castest.com:8443/cas/login”,這樣也會報錯。 --></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:8080</param-value></init-param></filter><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--該過濾器負責實現HttpServletRequest請求的包裹,比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。--><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。比如AssertionHolder.getAssertion().getPrincipal().getName()。--><filter><filter-name>CAS Assertion Thread Local Filter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- ======================== 單點登錄結束 ======================== --><!-- session超時定義,單位為分鐘 --><session-config><session-timeout>2</session-timeout></session-config></web-app>
復制代碼

  4. 此時訪問http://localhost:8080/CasClient/Index.jsp時會自動跳轉到sso.castest.com下去登錄

  

  輸入賬號和密碼casuser:Mellon

  

  此時客戶端已安裝成功。

  可以用類似的方式新建多個站點,站點1登錄以后站點而無需登錄也可訪問,如果未登錄則會跳轉到相應的url進行登錄驗證。

  至此,簡單的服務器搭建已經完成了。然而,此時用戶的驗證是通過配置文件cas\WEB-INF\deployerConfigContext.xml中指定用戶名和密碼的方式進行驗證的。

下面再另行介紹通過mysql數據庫驗證的方式。

一、CAS認證之mysql數據庫認證

  1、在mysql中新建一個cas數據庫并創建user表

復制代碼
CREATE DATABASE /*!32312 IF NOT EXISTS*/`cas` /*!40100 DEFAULT CHARACTER SET gbk */;USE `cas`;/*Table structure for table `user` */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,`password` varchar(255) NOT NULL,`used` tinyint(2) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;/*Data for the table `user` */insert  into `user`(`id`,`name`,`password`,`used`) values (1,'casuser','9414f9301cdb492b4dcd83f8c711d8bb',1);
復制代碼

  2、CAS的HTTP模式與HTTPS設置(可省略)

      1)cas\WEB-INF\deployerConfigContext.xml,新增p:requireSecure="false"<bean id="proxyAuthenticationHandler"          class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient" p:requireSecure="false"/>2)cas\WEB-INF\spring-configurationticketGrantingTicketCookieGenerator.xml設置p:cookieSecure="false"warnCookieGenerator.xml設置p:cookieSecure="false"

  http://localhost:8080/cas/login,進入登錄頁面。

  默認用戶為casuser/Mellon,登錄成功即配置完成。

  3、設置利用數據庫來驗證用戶

依賴包:
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.21.jar
cas-server-support-jdbc-4.0.0.jar

復制代碼
cas\WEB-INF\deployerConfigContext.xml1)更換驗證方式 
<!--<bean id="primaryAuthenticationHandler"class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"><property name="users"><map><entry key="casuser" value="Mellon"/></map></property></bean>--><!-- Define the DB Connection --><bean id="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"p:driverClass="com.mysql.jdbc.Driver"p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"p:user="root"p:password="root" /><!-- Define the encode method--><!--<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">     <constructor-arg value="MD5"/> </bean> --><bean id="passwordEncoder"class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"c:encodingAlgorithm="MD5"p:characterEncoding="UTF-8" /><bean id="dbAuthHandler"class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"p:dataSource-ref="dataSource"p:sql="select password from user where name=? and used=1"p:passwordEncoder-ref="passwordEncoder"/><!-- p:passwordEncoder-ref="passwordEncoder" -->2)更換驗證Handle
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager"><constructor-arg><map><!--| IMPORTANT| Every handler requires a unique name.| If more than one instance of the same handler class is configured, you must explicitly| set its name to something other than its default name (typically the simple class name).--><entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /><entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" /><!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> --></map></constructor-arg>

轉載于:https://www.cnblogs.com/ystq/p/6003889.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254098.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新CIO:Mark Schwartz認為的領先IT

美國公民及移民服務局前任CIO&#xff0c;現任AWS企業戰略師Mark Schwartz在倫敦舉行的DevOps企業峰會上介紹了什么是領先的IT。\\Schwartz介紹說&#xff0c;老舊、傳統的模型將業務和IT完全分開&#xff0c;他又提出了一種新的模型&#xff0c;在這種模型中&#xff0c;CIO擔…

689D Magic Odd Square 奇數幻方

1 奇數階幻方構造法 (1) 將1放在第一行中間一列; (2) 從2開始直到nn止各數依次按下列規則存放&#xff1a;按 45方向行走&#xff0c;向右上&#xff0c;即每一個數存放的行比前一個數的行數減1&#xff0c;列數加1 (3) 如果行列范圍超出矩陣范圍&#xff0c;則回繞。例如1在第…

Java單例的常見形式

2019獨角獸企業重金招聘Python工程師標準>>> Java單例的常見形式 本文目的&#xff1a;總結Java中的單例模式 本文定位&#xff1a;學習筆記 學習過程記錄&#xff0c;加深理解&#xff0c;便于回顧。也希望能給學習的同學一些靈感 一、非延遲加載單例類 public cla…

運動控制卡的基類函數與實現例子

基類 namespace MotionCardDll {public abstract class IMotionCard{public Int32 m_Mode;public Int32 m_BoardId;//Card 號public Int32 m_Card_name;public Int32 m_StartAxisID

U-Boot啟動過程完全分析

1.1 U-Boot 工作過程 U-Boot啟動內核的過程可以分為兩個階段&#xff0c;兩個階段的功能如下&#xff1a; &#xff08;1&#xff09;第一階段的功能 硬件設備初始化 加載U-Boot第二階段代碼到RAM空間 設置好棧 跳轉到第二階段代碼入口 &#xff08;2&#x…

CJOJ 2171 火車站開飯店(樹型動態規劃)

CJOJ 2171 火車站開飯店&#xff08;樹型動態規劃&#xff09; Description 政府邀請了你在火車站開飯店&#xff0c;但不允許同時在兩個相連的火車站開。任意兩個火車站有且只有一條路徑&#xff0c;每個火車站最多有 50 個和它相連接的火車站。 告訴你每個火車站的利潤&#…

JavaWeb總結(十五)

AJAX&#xff08;Asynchronous JavaScript and XML&#xff08;異步的 JavaScript 和 XML&#xff09;&#xff09; AJAX的作用是什么&#xff1f; 在無需重新加載整個網頁的情況下&#xff0c;能夠更新部分網頁的技術 是一種用于創建快速動態網頁的技術 通過在后臺與服務器進行…

工業相機基類與實現

基類 namespace Cameron {//相機參數public struct CamPara{public int DeviceID; //設備描述public string Name;public int WorkMode; //工作類型,0為連續模式,1為觸發模式public float Expours

物聯網技術周報第 143 期: Unity 3D 和 Arduino 打造虛擬現實飛行器

新聞 \\\\t《西門子、阿里云簽約助力中國工業物聯網發展》德國工業集團西門子和中國阿里巴巴集團旗下的云計算公司阿里云&#xff19;日在柏林簽署備忘錄&#xff0c;共同推進中國工業物聯網發展。根據備忘錄內容&#xff0c;西門子和阿里云將發揮各自技術和行業優勢&#xff…

不同平臺下 sleep區別用法

應用程序&#xff1a; #include <syswait.h> usleep(n) //n微秒 Sleep&#xff08;n&#xff09;//n毫秒 sleep&#xff08;n&#xff09;//n秒 驅動程序&#xff1a; #include <linux/delay.h> mdelay(n) //微秒milliseconds 其實現 #ifdef notdef #define mdelay…

各視頻、各音頻之間格式任意玩弄(圖文詳解)

寫在前面說的話 在這里&#xff0c;記錄下來&#xff0c;是為了方便以后偶爾所制作所需和你們前來的瀏覽學習。 學會&#xff0c;玩弄一些視頻和音頻的軟件&#xff0c;只有好處沒有害處。同時&#xff0c;也不需很多時間&#xff0c;練練手罷了。也是方便自己所用吧&#xff0…

oracle 如何查看日志?

2019獨角獸企業重金招聘Python工程師標準>>> Oracle日志查看一&#xff0e;Oracle日志的路徑&#xff1a;登錄&#xff1a;sqlplus "/as sysdba"查看路徑&#xff1a;SQL> select * from v$logfile;SQL> select * from v$logfile;(#日志文件路徑)二…

回歸_英國酒精和香煙關系

sklearn實戰-乳腺癌細胞數據挖掘(博客主親自錄制視頻教程) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 數據統計分析聯系:&#xff31;&#xff31;&#xff1a;&a…

C# ini文件讀寫函數

namespace Tools {class IniOperate{[DllImport("kernel32")]private static extern int GetPrivateProfileString(string section, string key,

Visual studio內存泄露檢查工具--BoundsChecker

BoundsChecker是一個Run-Time錯誤檢測工具&#xff0c;它主要定位程序在運行時期發生的各種錯誤。 BoundsChecker能檢測的錯誤包括&#xff1a; 1&#xff09;指針操作和內存、資源泄露錯誤&#xff0c;比如&#xff1a;內存泄露&#xff1b;資源泄露&#xff…

【轉】如何用Maven創建web項目(具體步驟)

使用eclipse插件創建一個web project 首先創建一個Maven的Project如下圖 我們勾選上Create a simple project &#xff08;不使用骨架&#xff09; 這里的Packing 選擇 war的形式 由于packing是war包&#xff0c;那么下面也就多出了webapp的目錄 由于我們的項目要使用eclipse發…

CST光源控制卡簡單操作C#程序

namespace Machine {class LightCST{private SerialPort serialPort ;public LightCST(){serialPort = new SerialPort();}

可能是目前最詳細的Redis內存模型及應用解讀

Redis是目前最火爆的內存數據庫之一&#xff0c;通過在內存中讀寫數據&#xff0c;大大提高了讀寫速度&#xff0c;可以說Redis是實現網站高并發不可或缺的一部分。 我們使用Redis時&#xff0c;會接觸Redis的5種對象類型&#xff1a;字符串、哈希、列表、集合、有序集合。豐富…

bootcmd 和bootargs

看到這個標題&#xff0c;可能覺得這個并沒有什么的&#xff0c;其實不然&#xff0c;編好了u-boot了&#xff0c;但是如何來使用確不是那么簡單的&#xff0c;想當初我將uboot制作出來后以為全部都搞定了&#xff0c;屁顛屁顛的燒到板子上后可系統就是起不來&#xff0c;為什么…

名詞解釋(容器、并發,插件,腳本)及程序對象的創建和注釋文檔

一、專有名詞 1‘  容器 創建一種對象類型&#xff0c;持有對其他對象的引用&#xff0c;被稱為容器的新對象。在任何時候都可以擴充自己以容納置于其中的所有東西。 java在其標準類庫中包含了大量的容器。在某些類庫中&#xff0c;一兩個通用容器足以滿足所有的需要&#xf…