CAS之——自定义改造

CAS之——自定义改造

本文总结一些CAS集成过程中的自定义改造需求与实现,持续更新,也欢迎各位前辈提出意见与建议。

更新日志
  1. 2018-12-30 初次添加
  2. 2019-01-20 集成redis存储ticket

环境

  • CAS服务端:cas-4.0.0,下载部署参见此篇文章
  • cas客户端:引用第三方jar包
  • 项目:JDK1.8、Spring Boot
    • 结构
      项目结构

    • pom.xml:添加第三方jar包即可:
      CAS客户端第三方jar包

    • Main.java:增加@EnableCasClient()注解即可

    • WellcomeController.java:
      测试Controller

    • application.yml:
      项目配置文件

  • 本地nginx配置:
    nginx配置

一、改造:SSO认证通过后回跳地址支持一个域名多个上下文

  • 需求:

  • 原先:回跳地址会“丢失”CAS客户端项目上下文。

    • 访问 http://casclient.develop.com/client1/welcome ,因未登陆而重定向到CAS服务端
    • CAS服务地址栏中的现象:
      CAS服务地址栏中的现象
    • 认证成功后,回跳不到客户端:
      认证后回跳不到客户端
    • 原因:org.jasig.cas.client.util.CommonUtils.constructServiceUrl方法中构造service时,丢失了项目的上下文:
      原因
  • 改造:

    • 在项目中重写 org.jasig.cas.client.util.CommonUtils.constructServiceUrl方法:
      改造方法

二、改造:CAS客户端实现单点登出(logout)

  • 需求:
    • 在多项目(CAS客户端)同时使用相同CAS服务时,只要在一个客户端退出登录,其他所有端均退出登录状态
    • 现在:一个客户端退出登录,其他客户端仍然可以访问受限资源
  • 改造:添加logout过滤器和监听器
    • 增加客户端退出接口:如需退出,直接访问当前客户端的/logout接口即可
      客户端退出登录
    • 此文 基础上做了一个小改动即可实现:
import net.unicon.cas.client.configuration.CasClientConfigurationProperties;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CASConfigutaions {
   

    /**
     * 通过net.unicon.cas包获取配置
     */
    @Autowired
    CasClientConfigurationProperties configProps;

    @Bean
    public SingleSignOutFilter singleSignOutFilter(){
   
        return new SingleSignOutFilter();
    }

    @Bean
    public FilterRegistrationBean singleSignOutFilterBean(){
   
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(singleSignOutFilter());
//        filterRegistrationBean.addInitParameter("targetFilterLifecycle","true");
        filterRegistrationBean.setEnabled(true);
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.setOrder(1);

        //设置cas配置->此处通过net.unicon.cas包获取配置
        filterRegistrationBean.addInitParameter("casServerUrlPrefix", configProps.getServerUrlPrefix());
        filterRegistrationBean.addInitParameter("serverName", configProps.getClientHostUrl());

        filterRegistrationBean.setName("singleFilter");
        System.out.println("================================singleFilter执行");
        return filterRegistrationBean;
    }
    
    @Bean
    public SingleSignOutHttpSessionListener singleSignOutHttpSessionListener(){
   
        return new SingleSignOutHttpSessionListener();
    }

    @Bean
    public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListenerBean() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值