阿里二面:SpringBoot如何配置自动/手动方式集成CAS单点登出

本文详细介绍了如何基于SpringBoot和Maven,通过自动配置和手动配置两种方式实现CAS客户端的登出及单点登出功能。文中包括配置CAS服务端、设置代码结构、关键类的实现以及各个步骤的验证过程。
摘要由CSDN通过智能技术生成

本文目标

基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式实现CAS客户端登出及单点登出。

本文基于《CAS学习笔记三:SpringBoot自动/手动配置方式集成CAS单点登录》的代码扩充而来,完整代码见 https://github.com/hellxz/cas-integration-demo

CAS服务端配置

单点登出跟随 service 给出的跳转地址重定向功能 在 CAS 服务端默认是关闭的,所以需要先开启它。

vim webapps/cas/WEB-INF/classes/application.properties

在最下方追加配置项 cas.logout.followServiceRedirects=true,保存重启CAS服务端。

代码目录结构

以上红字仅对本文修改的部分进行说明,其余请参考之前单点登录的实现文章。

代码实现

仅增量介绍关键类

SpringBoot自动配置登出实现

CasClientConfigurerImpl.java

package com.hellxz.cas;

import java.util.Map;

import org.jasig.cas.client.boot.configuration.CasClientConfigurer;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.stereotype.Component;

/**
 * cas-client-support-springboot 依赖提供了CAS客户端的自动配置,
 * 当自动配置不满足需要时,可通过实现{@link CasClientConfigurer}接口来重写需要自定义的逻辑
 */
@Component
public class CasClientConfigurerImpl implements CasClientConfigurer {

    /**
     * 配置认证过滤器,添加忽略参数,使/logoutPage登出提示页免登录
     */
    @Override
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void configureAuthenticationFilter(final FilterRegistrationBean authenticationFilter) {
        Map initParameters = authenticationFilter.getInitParameters();
        initParameters.put("ignorePattern", "/logoutPage");
    }

}

上边这个配置类的作用是自定义认证过滤器,将 /logoutPage 排除不走认证逻辑,此页面用于显示登出提示。

CasAutoConfigApp.java

package com.hellxz.cas;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.jasig.cas.client.boot.configuration.EnableCasClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@EnableCasClient
public class CasAutoConfigApp {
    @Value("${custom.cas.single-logout-url:}")
    public String casSingleLogoutUrl;

    public static void main(String[] args) {
        SpringApplication.run(CasAutoConfigApp.class, args);
    }

    @GetMapping("/test")
    public String test(HttpServletRequest request) {
        return "服务A测试通过";
    }
    
    /**
     * 首页,需要登录
     */
    @GetMapping("/index")
    public String index(HttpServletRequest request) {
      //@formatter:off
        return "<h1>登录成功</h1><br><br>"
                + "<a href=\"/logout\">退出登录</a><br><br>"
                + "<a href=\"" + casSingleLogoutUrl + "\">全局退出登录</a>";
      //@formatter:on
    }

    /**
     * 登出提示页,免登录
     */
    @GetMapping("/logoutPage")
    public String logoutPage(HttpServletResponse response) {
        //@formatter:off
        return "<h1&g
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值