cas单点登录的服务器端与客户端的搭建

cas单点登录的服务器端与客户端的搭建

cas服务器端:

一、将下载的源码cas-server-webapp工程导入idea中,将工程导出为war包,直接放入tomcat下的webapp中运行.
二、修改为自定义数据源
(1)修改cas-server-webapp/WEB-INF/deployerConfigContext.xml,注释以下代码:

    <!--<bean id="primaryAuthenticationHandler"-->
    <!--class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">-->
    <!--<property name="users">-->
    <!--<map>-->
    <!--<entry key="user" value="root"/>-->
    <!--</map>-->
    <!--</property>-->
    <!--</bean>-->

(2)在cas-server-webapp/WEB-INF/deployerConfigContext.xml文件中新增配置:

    <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
        <constructor-arg value="MD5"></constructor-arg>
        <property name="characterEncoding" value="UTF-8"></property>
    </bean>

    <!-- 自定义数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl"
                  value="jdbc:mysql://127.0.0.1:3306/wego?useUnicode=true&amp;characterEncoding=UTF-8"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <!-- 认证控制器 -->
    <bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler"
          class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
        <property name="passwordEncoder" ref="passwordEncoder"/>
        <property name="dataSource" ref="dataSource"/>
        <!-- 通过用户名查询密码的SQL -->
        <property name="sql" value="select password from cas_sys_user where username =?"/>
    </bean>

(3)引入maven依赖:

    <dependency>
      <groupId>org.jasig.cas</groupId>
      <artifactId>cas-server-support-jdbc</artifactId>
      <version>4.1.7</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

(4)修改为HTTP方式访问:
a、修改cas-server-webapp/WEB-INF/cas.properties

tgc.secure=false
warn.cookie.secure=false

b、修改cas-server-webapp/src/main/resources/services/HTTPSandIMAPS-10000001.json
修改serviceId的值:

"serviceId" : "^(https|imaps|http)://.*"

c、删除cas-server-webapp/WEB-INF/view/jsp/default/ui/casLoginView.jsp页面中校验是否是HTTPS协议的标签块

<c:if test="${not pageContext.request.secure}">
    <div id="msg" class="errors">
        <h2><spring:message code="screen.nonsecure.title" /></h2>
        <p><spring:message code="screen.nonsecure.message" /></p>
    </div>
</c:if>

至此,cas服务器端已经搭建起来了,可以点击上面的链接下载源码。

cas客户端:

(1)引入maven依赖:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

    <dependency>
      <groupId>org.jasig.cas.client</groupId>
      <artifactId>cas-client-core</artifactId>
      <version>3.2.0</version>
    </dependency>

(2) 在web.xml中配置CAS

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <display-name>Archetype Created Web Application</display-name>
  <!-- 单点退出Listener -->
  <listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
  </listener>

  <!-- 单点退出Filter -->
  <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>

  <!-- CAS认证Filter -->
  <filter>
    <filter-name>CASFilter</filter-name>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
      <!-- CAS登录页面,当SessionId无法匹配Session时,跳转到CAS登录页面 -->
      <param-name>casServerLoginUrl</param-name>
      <param-value>http://localhost:8080/cas-server-webapp-4.2.7/login</param-value>
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
      <param-value>http://localhost:8200</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- CAS Ticket校验Filter -->
  <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>http://localhost:8080</param-value>
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
      <param-value>http://localhost:8200</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 使客户端支持通过AssertionHolder来获取用户的登录名 -->
  <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>
</web-app>

客户端可通过 AssertionHolder.getAssertion().getPrincipal().getName() 获取当前登录用户的用户名
至此,cas客户端已经搭建起来了,可以点击上面的链接下载源码。

测试:

在浏览器第一次访问http:localhost:8200
(1)用户第一次访问项目,请求将到达项目A的CAS Filter,由于没有携带SessionId,无法成功匹配Session,因此项目认为该用户未登录,返回302状态码示意浏览器将请求重定向到CAS Server进行登录处理,并在请求URL后追加service参数传递原访问项目的URL。
(2)CAS Client根据SessionId能否成功匹配到Session来判断当前用户是否已经登录过。
(3)当浏览器收到项目返回的302重定向请求后,对重定向目标地址重新发起HTTP请求,最终到达CAS Server进行登录处理,由于浏览器不存在TGC Cookie,CAS Server认为用户未进行登录,因此将请求转发到登录页面.。
在这里插入图片描述
(4)输入用户名/密码进行提交
(5)CAS Server对用户输入的用户名/密码进行校验,若校验成功则返回302状态码示意浏览器将请求重定向到原访问项目的URL地址并在URL后追加ticket参数传递ST,并且最终保存TGC Cookie在客户端浏览器进程所占用的内存中。
(6)CAS Server根据TGC匹配TGT, TGT又与用户的登录信息相关联。当用户登录成功后,此时客户端就存在TGC Cookie, CAS服务端就存在对应的TGT。
在这里插入图片描述
(7)*当浏览器收到CAS Server返回的302重定向请求后,对重定向目标地址重新发起HTTP请求( 携带ticket参数 ),此时请求将会进入项目的ticket验证Filter中, 项目将对 ticket(ST) 进行有效性校验( 内部访问Cas Server进行校验 ),若校验成功则返回302状态码示意浏览器将请求重定向到原访问项目的地址( 不带ticket参数 )。
(8)当浏览器收到项目返回的302重定向请求后, 重新请求最初访问项目的URL地址。 由于携带了SessionId并且能成功匹配Session对象,因此项目认为用户已经进行登录,允许访问资源。
(9) 用户再次访问项目,由于携带了SessionId并且能成功匹配Session对象,因此项目认为用户已经进行登录,允许访问资源。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAS(Central Authentication Service)是一种单点登录协议,用于实现在多个应用系统中进行统一的身份认证和授权。CAS客户端是指集成CAS协议的应用系统,用于与CAS服务器进行通信并实现单点登录功能。 以下是CAS客户端集成单点登录的代码示例: ```java // 引入CAS客户端依赖 <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.6.0</version> </dependency> // 配置CAS客户端 <bean id="casClient" class="org.jasig.cas.client.authentication.CasClientAuthenticationFilter"> <property name="casServerLoginUrl" value="http://localhost:8081/cas/login" /> <property name="serverName" value="http://localhost:8080" /> </bean> // 配置CAS过滤器 <filter> <filter-name>CAS Authentication Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://localhost:8081/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Authentication Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> // 配置CAS单点登出过滤器 <filter> <filter-name>CAS Logout Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Logout Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> // 配置CAS请求单点登出过滤器 <filter> <filter-name>CAS Request Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Request Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 以上代码是一个Java Web应用中集成CAS客户端的示例,通过配置CAS客户端和相关过滤器,实现与CAS服务器的通信和单点登录功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值