1. 程式人生 > >單點登入(一)__原生入門

單點登入(一)__原生入門

什麼叫單點登入?

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>