單點登入(一)__原生入門
什麼叫單點登入?
SSO(Single Sign On): 多個相互信任的系統,只要在一個系統裡面登入了,其他的系統就認為你是登入狀態,這就是單點登入.
session無法做單點登入,多個web系統間無法做session同步,如果非要做就做session就得同步,這樣的話如果分散式系統多的話就有一個問題session風暴,多個系統之間的通道都被session充斥
什麼是CAS?
CAS是2004年耶魯大學發起的開源專案,能夠實現單點登入 ,分為服務端和客戶端.
1.開源的企業級單點登入解決方案
2.CAS Server 為需要獨立部署的 Web 應用(war包)
3.cas client 支援很多種客戶端(java)
單點登入的流程是怎麼樣?
client發請求給頁面,頁面發現他沒有登入,直接將請求重定向給登入頁面, 使用者登入成功後,由CAS服務費給使用者瀏覽器一個ticket(這個過程叫使用者認證),之後使用者訪問其他頁面,其他頁面將根據使用者的ticket交給CAS叫校驗(這個過程叫票據驗證),驗證通過,使用者可以直接訪問其他的頁面.
1 CAS服務端的配置
服務端比較好配置,只需要將CAS的war包放到tomcat的webapps目錄下,啟動tomcat解壓war包就可以 ,使用者只需要輸入: tomcat地址+埠號+/cas 就可以直接跳轉到CAS的登入頁面
注意:如果有多個tomcat要注意埠號不好衝突,修改配置資訊在CAS解壓包的cas.properties裡面
2 CAS客戶端的配置
第一步:導包
匯入:cas客戶端包 和sevlet包,已經匯入一個tomcat外掛
<packaging>war</packaging> <dependencies> <!--CAS--> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定埠 --> <port>9001</port> <!-- 請求路徑 --> <path>/</path> </configuration> </plugin> </plugins> </build>
第二步 :新增web.xml配置檔案
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!--三個過濾器分別是: 1 單點退出過濾器 2.使用者認證過濾器 3.Ticket驗證過濾器 --> <!--監聽器--> <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>/*</url-pattern> </filter-mapping> <!--使用者認證過濾器--> <filter> <filter-name>casFilter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <!--這裡配置服務端ip--> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://localhost:9100/cas/login</param-value> </init-param> <!--這裡配置client端ip--> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</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> <!--配置服務端ip--> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://localhost:9100/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
第三步:編寫index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>一品優購</title> </head> <body> <h2>歡迎來到一品優購</h2> <%=request.getRemoteUser()%> <a href="http://localhost:9100/cas/logout?service=service=http//www.baidu.com">退出</a> </body> </html>
將上面的專案複製一份,叫做專案2 ,然後啟動2個專案
第四步:測試檢視結果
預設登入使用者名稱和密碼在deployerConfigContext.xml 配置裡面,使用者名稱:casuser 密碼:Mellon ,也可以在這個配置裡面新增entry,這是寫死的使用者名稱和密碼,一般情況下我們需要在資料庫中訪問驗證,這個我們交給下一篇文章解決,
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>