cas4.2.7实现单点登陆

cas4.2.7实现单点登陆

一、搭建cas服务

下载cas-overlay 项目导入编译器,pom.xml 引入 cas-server-webapp jar (版本请根据你项目实际情况)将项目目录etc下的文件cas.properties 文件复制到项目的WEB-INF目录下
在这里插入图片描述
在target 目录下找到文件 spring-configuration,unused-spring-configuration,view,webflow,cas-servlet.xml,deployerConfigContext.xml 文件复制到 项目WEB-INF下
将项目文件中的文件propertyFileConfigurer.xml 文件中 location属性文件cas.properties路径改成你当前项目文件路径
在这里插入图片描述
替换原始的页面样式 在cas-server.xml 中 bean id为urlBasedViewResolver的 p:prefix 属性做修改

<bean id="urlBasedViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"
          p:viewClass="org.springframework.web.servlet.view.InternalResourceView"
          p:prefix="${cas.themeResolver.pathprefix:/WEB-INF/view/jsp}/"
          p:suffix=".jsp"
          p:order="2000"/>

${cas.themeResolver.pathprefix } 具体路径可以在cas.properties 中找对应的属性名 做修改

cas4.2.7 取消https

cas.properties 文件找 tgc.secure 和 warn.cookie.secure 修改为了false
在这里插入图片描述
找到文件HTTPSandIMAPS-10000001.json 在serviceId 中体检http的验证
在这里插入图片描述
如使用原始 casLoginView.jsp 在文件中注释掉提示代码
在这里插入图片描述

链接数据库

如需链接数据验证登陆信息 在文件 deployerConfigContext.xml 找到 bean name=‘dataSource’
添加链接数库信息
在这里插入图片描述
在cas.properties 中添加响应的链接信息 注意 项目中需要添加响应的数据库包
注释掉原来的acceptUsersAuthenticationHandler配置

 <alias  name="acceptUsersAuthenticationHandler"    alias="primaryAuthenticationHandler"  />

密码加密项配置(例 MD5)

 <bean  id="MD5PasswordEncoder"   class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"   autowire="byName">   
<constructor-arg  value="MD5"/>

<bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
  	<property name="passwordEncoder" ref="MD5PasswordEncoder" />
  </bean>

sql 信息修改 在cas.proerties 中 修改配置 cas.jdbc.authn.query.sql 添加队形的sql

cas.jdbc.authn.query.sql=select password  from  t_user  where account=? 

sql 中具体字段自定义,只要时根据账号查询出密码就成

一、搭建cas客户端

客户端只需要修改引入响应的cas客户端的jar包 在web.xml 中添加客户端配置(本例按照web.xml)说明

<!-- ****************** 单点登录开始 ********************-->

<!-- 用于实现单点登出功能  可选 -->
<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>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://localhost:8080/cas/</param-value>
    </init-param>
</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>
    <init-param>
        <!--casServerLoginUrl:cas服务的登陆url -->
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://localhost:8080/cas/login</param-value>
    </init-param>
    <init-param>
        <!--serverName:本项目的地址 -->
        <param-name>serverName</param-name>
        <param-value>http://localhost:8081</param-value>
    </init-param>
    <init-param>
        <param-name>useSession</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>redirectAfterValidation</param-name>
        <param-value>true</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>http://localhost:8080/cas/</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8081</param-value>
    </init-param>
</filter>
   
<filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <!-- 对项目中的哪些路径做登录拦截-->
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 该过滤器对HttpServletRequest请求包装, 可通过HttpServletRequest的getRemoteUser()方法获得登录用户的登录名,可选 -->
<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()。 
这个类把Assertion信息放在ThreadLocal变量中,这样应用程序不在web层也能够获取到当前登录信息 -->
<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>
<!-- ****************** 单点登录结束 ********************-->

我在项目开发过程中遇到一个坑点 就是每次登陆成功后 点击客户端,又回到了登陆界面,查看后台日志,发现 在进行客户端回调服务端的验证中心时,找不到验证中心的映射路径,查看源码后映射路径是有的
在这里插入图片描述
很奇怪,折腾了好久也不行,最后本人的处理方式是
继承源码,在服务端重新添加回调验证的映射路径
步骤:
1 找到文件applicationContext.xml 发下 在 id为handlerMappingC 的bean 中又配置映射路径的信息,因此在这个bean 中添加一个新的映射 为我的客户端回调映射 并添加我的心的Controller 类
MyServiceValidateController在这里插入图片描述
MyServiceValidateController 类中继承AbstractController 重写方法handleRequestInternal
在handleRequestInternal 中的逻辑和源码中的handleRequestInternal 中的逻辑一样 只是在源码中的handleRequestInternal 直接调用的父级的方法(handleRequestInternal) 我们可以直接看父级的代码
在这里插入图片描述
可以直接复制父级的代码到我新的Controller 中

完事后,重启服务 登陆成功后,点击客户端,可以直接正常访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值