单点登录(一)__原生入门

什么叫单点登录?

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>

 

猜你喜欢

转载自blog.csdn.net/weixin_42333583/article/details/82792973