首页 > 其他分享 >浅记cas集成

浅记cas集成

时间:2023-03-17 14:14:43浏览次数:38  
标签:集成 cas request response CAS client url 浅记

注意:集成单点登录后,可以完成用户认证逻,需要进一步查询用户中心接口获取用户绑定角色等信息。

接入参考CAS官方Github客户端示例

SpringBoot项目示例

1、springboot项目在pom文件添加如下cas依赖 ,依赖版本3.6.2

<!-- CAS Client Config -->
<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-support-springboot</artifactId>
    <version>${jasig-cas-client.version}</version>
</dependency>

2、在配置文件application中配置cas的sso服务器地址,本机服务地址,重定向地址

# CAS Config
cas.server-url-prefix=http://1031.811.15.177:8081
cas.server-login-url=http://1031.811.15.177:8081/login
cas.single-logout.enabled=true
cas.client-host-url=http://11031.811.15.177:7256
cas.authentication-url-patterns=/login/*
cas.validation-url-patterns=/login/*
cas.validation-type=CAS

3、定义配置类,开启CAS拦截过滤

import org.jasig.cas.client.boot.configuration.CasClientConfigurer;
import org.jasig.cas.client.boot.configuration.EnableCasClient;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableCasClient
public class CasClient implements CasClientConfigurer {
    
}

  1. 登录成功后从Session中读取用户信息

@Tag(name = "单点登录业务")
@Controller
@RequestMapping("/login")
@Slf4j
public class LoginController<S extends Session> {
    @GetMapping("/cas")
    public void cas(
        HttpServletRequest request,
        HttpServletResponse response,
        String resultUrl
    ) throws IOException {         
        HttpSession casSession = request.getSession();
        try {
            Assertion assertion = (Assertion) casSession.getAttribute(GlobalText.CAS_ATTR_NAME);
            Map<String, Object> attrs = assertion.getPrincipal().getAttributes();

            for (Entry<String, Object> attr : attrs.entrySet()) {
                log.debug("Attr {} : {}", attr.getKey(), attr.getValue());
            }
            Long userId = Long.valueOf(String.valueOf(attrs.get("userId")).strip());
            // 本地数据保存
            // 完成本地会话处理,引导浏览器重定向至登录前位置
            response.sendRedirect(redirectLocation + connector + "token=" + session.getId());
        } catch(IOException exp) {
            log.info(exp.getMessage());
            response.sendRedirect(redirectLocation);
        }
    }
    
}

  1. 退出登录,目前的解决方案为拿到cookie中cas票据,依次清除,再将缓存中的session信息清除。仅完成分系统及SSO的退出操作,如果需要做单点注销,需要进一步调用接口进行登出。

@Tag(name = "退出")
@RestController
@RequestMapping("/logout")
public class LogoutController<S extends Session> {

    @Autowired
    private FindByIndexNameSessionRepository<S> sessionRepository;
    
    @Autowired
    private Redirect redirect;

    @Operation(summary = "退出")
    @GetMapping("/cas")
    public void logout(
        HttpServletRequest request,
        HttpServletResponse response,
        @RequestParam(name = "resultUrl", required = true) String resultUrl,
        @RequestParam(name = "token", required = true) String token
    ) throws IOException {

        Enumeration<String> em = request.getSession().getAttributeNames();
        while(em.hasMoreElements()){
            request.getSession().removeAttribute(em.nextElement());
        }
        sessionRepository.deleteById(token);

        response.sendRedirect(redirect.getLogoutUrl() + resultUrl);
    }
}

 

标签:集成,cas,request,response,CAS,client,url,浅记
From: https://www.cnblogs.com/laifo/p/17226522.html

相关文章

  • PebbleTemplates 一种集成玩法
    PebbleTemplates具有比较灵活的扩展性,扩展下可以做一些比较有意思的玩法参考图  简单说明模版官方部分基于了s3进行存储,我们可以通过ci/cd工具,或者利用gitapi......
  • SpringBoot集成knife4j
    1.knife4j文档地址:https://doc.xiaominfo.com/knife4j是为JavaMVC框架集成Swagger生成Api文档的增强解决方案。2.Swagger介绍前后端分离开发模式中,api文档是最好的......
  • IntelliJ IDEA集成本地Maven步骤
    IntelliJIDEA集成本地Maven步骤一、前期准备Maven已经在本地环境配置完成,步骤可以参考我的这篇文章:https://www.cnblogs.com/rainbow-1/p/17223811.html二、IDEAmave......
  • 狂神说 springboot集成redis
    文章目录1.概述1.1SpringData1.2lettuce2.部分源码2.1自动配置2.2Jedis.pool不生效3.使用4.序列化4.1为什么要序列化4.2为什么要自定义......
  • CAS算法
    CAS算法今天在看了《Java并发编程的艺术》,学习如何减少上下问切换的时候,里面说到了通过CAS算法来更新数据,而它不需要加锁。不太理解什么是CAS算法,所以在网上搜罗半天资料,......
  • mongodb switch case
    //构造测试数据db.hello100.insertMany([ {"name":"doc01","age":10}, {"name":"doc02","age":11}, {"name":"doc03","age":12}, {"name":"doc03",&qu......
  • spring boot集成swagger3
    springboot集成swagger3 springboot集成swagger3swagger2的整合:https://www.cnblogs.com/chenglc/p/10910721.htmlswagger3的使用步骤和2略有差异maven依赖......
  • ABP 结合 MongoDB 集成依赖注入
    1.我们再ABP项目添加一个.NETCore类库 类库名自定定义,我这里定义为 TexHong_EMWX.MongoDb添加NuGet包。ABPmongocsharpdriver  添加 AbpMongoDbConfigurati......
  • 前后端分离项目(vue+springboot)集成pageoffice实现在线编辑office文件
    前后端分离项目下使用PageOffice原理图集成步骤前端vue项目在您Vue项目的根目录下index.html中引用后端项目根目录下pageoffice.js文件。例如:<scripttype="te......
  • 系统集成项目管理工程师(中级) -- 项目管理(十三)
    一、知识产权1、著作权法及实施条例的主体是指著作权关系人,通常包括著作权人和受让者两种。(1)著作权人,又称为原始著作权人,是根据创作的事实进行确定的创作、开发者。(2)受......