当前位置: 首页 > news >正文

使用SpringBoot集成CAS、应用场景和示例代码

Spring Boot与CAS集成可以为应用程序提供单点登录(SSO)功能,CAS(Central Authentication Service)是一种单点登录协议,用于通过一个中央认证服务器来进行认证,从而使用户可以通过一次登录访问多个应用程序。

概述

集成CAS到Spring Boot应用程序中,通常需要以下步骤:

  1. 配置CAS客户端,使其能够与CAS服务器进行通信。
  2. 配置Spring Security,以便应用程序能够使用CAS进行身份验证。
  3. 编写必要的配置和代码,确保CAS和Spring Security协同工作。

应用场景

  • 企业内部系统:统一企业内部系统的登录认证,用户只需登录一次即可访问多个应用。
  • 教育机构:学生和教职工可以通过CAS进行统一登录,方便访问多个教育相关的应用。
  • 各种Web应用:任何需要单点登录的Web应用场景,CAS都可以作为解决方案。

示例代码

以下是一个简单的Spring Boot应用程序,集成CAS进行单点登录。

依赖配置

确保在pom.xml中添加必要的依赖项:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-cas</artifactId>
</dependency><dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.6.0</version>
</dependency>
CAS客户端配置

application.properties(或application.yml)中配置CAS服务器和客户端信息:

# CAS Server URL
cas.server.url.prefix=https://your-cas-server.com/cas
cas.server.login.url=${cas.server.url.prefix}/login
cas.server.logout.url=${cas.server.url.prefix}/logout# CAS Client
cas.client.host-url=http://localhost:8080
cas.client.login-url=${cas.server.login.url}?service=${cas.client.host-url}/login/cas
cas.client.logout-url=${cas.server.logout.url}?service=${cas.client.host-url}/logout# Application properties
server.port=8080
Spring Security配置

创建一个配置类来配置Spring Security与CAS集成:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.cas.ServiceProperties;
import org.springframework.security.cas.authentication.CasAssertionAuthenticationToken;
import org.springframework.security.cas.authentication.CasAuthenticationProvider;
import org.springframework.security.cas.web.CasAuthenticationEntryPoint;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.AuthenticationUserDetailsService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.web.authentication.logout.LogoutFilter;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll().anyRequest().authenticated().and().logout().logoutSuccessUrl("/").invalidateHttpSession(true).deleteCookies("JSESSIONID").and().addFilterBefore(casLogoutFilter(), LogoutFilter.class).exceptionHandling().authenticationEntryPoint(casAuthenticationEntryPoint());}private CasAuthenticationEntryPoint casAuthenticationEntryPoint() {CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint();entryPoint.setLoginUrl("https://your-cas-server.com/cas/login");entryPoint.setServiceProperties(serviceProperties());return entryPoint;}private ServiceProperties serviceProperties() {ServiceProperties serviceProperties = new ServiceProperties();serviceProperties.setService("http://localhost:8080/login/cas");serviceProperties.setSendRenew(false);return serviceProperties;}private LogoutFilter casLogoutFilter() {String logoutUrl = "https://your-cas-server.com/cas/logout";CasLogoutFilter filter = new CasLogoutFilter(logoutUrl, new SecurityContextLogoutHandler());filter.setFilterProcessesUrl("/logout");return filter;}// CAS Authentication Provider@Beanpublic CasAuthenticationProvider casAuthenticationProvider() {CasAuthenticationProvider provider = new CasAuthenticationProvider();provider.setAuthenticationUserDetailsService(casUserDetailsService());provider.setServiceProperties(serviceProperties());provider.setTicketValidator(new Cas30ServiceTicketValidator("https://your-cas-server.com/cas"));provider.setKey("CAS_PROVIDER_LOCALHOST_8080");return provider;}// User Details Service for CAS Authentication@Beanpublic AuthenticationUserDetailsService<CasAssertionAuthenticationToken> casUserDetailsService() {return token -> {String username = token.getName();// Dummy implementation to load user details, replace with your actual logicUserDetails userDetails = loadUserByUsername(username);return userDetails;};}// Dummy UserDetailsService (replace with your actual implementation)private UserDetails loadUserByUsername(String username) {if ("user".equals(username)) {return new org.springframework.security.core.userdetails.User(username, "password", true, true, true, true,AuthorityUtils.createAuthorityList("ROLE_USER"));} else {throw new UsernameNotFoundException("User not found.");}}
}

在上面的代码中:

  • casAuthenticationEntryPoint() 配置CAS认证入口点。
  • serviceProperties() 配置CAS客户端的服务属性。
  • casLogoutFilter() 配置CAS登出过滤器。
  • casAuthenticationProvider() 配置CAS认证提供者。
  • casUserDetailsService() 实现CAS认证时的用户详情服务,需要根据实际情况替换为真实的用户加载逻辑。

总结

通过以上配置和代码示例,你可以实现Spring Boot与CAS的集成,为你的应用程序提供单点登录功能,确保用户能够通过一次登录访问多个应用,提升用户体验和安全性。

相关文章:

使用SpringBoot集成CAS、应用场景和示例代码

Spring Boot与CAS集成可以为应用程序提供单点登录&#xff08;SSO&#xff09;功能&#xff0c;CAS&#xff08;Central Authentication Service&#xff09;是一种单点登录协议&#xff0c;用于通过一个中央认证服务器来进行认证&#xff0c;从而使用户可以通过一次登录访问多…...

python爬取某财富网

点赞的人太多了。我只能修改一下代码… 感觉不对劲啊、 过程&#xff1a; 点击底部的第3页&#xff0c;第5页&#xff0c;网页刷新了&#xff0c;但是顶部的url地址没有变。那么就是 动态加载&#xff0c; 就是 XHR. 直接请求api. 实验代码如下: import requestsheaders {…...

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3&#xff08;含分析…...

NLP-使用Word2vec实现文本分类

Word2Vec模型通过学习大量文本数据&#xff0c;将每个单词表示为一个连续的向量&#xff0c;这些向量可以捕捉单词之间的语义和句法关系。本文做文本分类是结合Word2Vec文本内容text&#xff0c;预测其文本标签label。以下使用mock商品数据的代码实现过程过下&#xff1a; 1、…...

基于SpringBoot实现验证码功能

目录 一 实现思路 二 代码实现 三 代码汇总 现在的登录都需要输入验证码用来检测是否是真人登录&#xff0c;所以验证码功能在现在是非常普遍的&#xff0c;那么接下来我们就基于springboot来实现验证码功能。 一 实现思路 今天我们介绍的是两种主流的验证码&#xff0c;一…...

字节测开面筋大总结!!!!

字节测开 字节 测开 一二三面 面经字节测开实习凉经字节测开一面字节测开一面凉经字节测开一面凉经字节测开一面凉经字节测开一面凉经字节跳动测开&#xff08;电商&#xff09;一面字节测开实习二面字节测开面经字节测开面经字节测开实习一面字节测开一面&#xff08;挂&#…...

Mindspore框架DCGAN模型实现漫画头像生成|(二)DCGAN模型构建

Mindspore框架DCGAN模型实现漫画头像生成 Mindspore框架DCGAN模型实现漫画头像生成|&#xff08;一&#xff09;漫画头像数据集准备Mindspore框架DCGAN模型实现漫画头像生成|&#xff08;二&#xff09;DCGAN模型构建Mindspore框架DCGAN模型实现漫画头像生成|&#xff08;三&a…...

mongo-csharp-driver:MongoDB官方的C#客户端驱动程序!

MongoDB一个开源、高性能、无模式的文档型数据库&#xff0c;在日常项目开发中&#xff0c;运用也是非常广泛。 MongoDB官方也针对各门编程语言&#xff0c;都推出相应的客户端驱动程序&#xff0c;下面一起了解下C#版本。 01 项目简介 mongo-csharp-driver是 MongoDB官方C#…...

网络流量分析>>pcapng文件快速分析有用价值解析

引言 在网络安全和流量管理中&#xff0c;解析网络协议数据包是了解网络行为和检测潜在威胁的关键步骤。本文介绍了如何使用Python解析和分析TCP、UDP和ICMP协议的数据包&#xff0c;并统计端口的访问次数。本文的示例代码展示了如何处理不同协议的数据包&#xff0c;提取关键…...

【大模型系列篇】Vanna-ai基于检索增强(RAG)的sql生成框架

简介 Vanna是基于检索增强(RAG)的sql生成框架 Vanna 使用一种称为 LLM&#xff08;大型语言模型&#xff09;的生成式人工智能。简而言之&#xff0c;这些模型是在大量数据&#xff08;包括一堆在线可用的 SQL 查询&#xff09;上进行训练的&#xff0c;并通过预测响应提示中最…...

【Nacos安装】

这里写目录标题 Nacos安装jar包启动Docker单体Docker集群 Nacos相关配置日志配置数据库配置 Nacos安装 jar包启动 下载jar包 在官方github&#xff0c;根据需求选择相应的版本下载。 解压 tar -zxvf nacos-server-2.4.0.1.tar.gz或者解压到指定目录 tar -zxvf nacos-serv…...

js、ts、argular、nodejs学习心得

工作中需要前端argular开发桌面程序&#xff0c;后端用nodejs开发服务器&#xff0c;商用软件架构...

【Unity】RPG2D龙城纷争(十八)平衡模拟器

更新日期:2024年7月31日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、BalanceSimulator 类二、RoleAgent 角色代理类三、绘制代理角色四、模拟攻击简介 平衡模拟器用于实时模拟测试角色属性以及要诀属性的数值,以寻找数值设计的平衡性。 介于运行正式游…...

java.lang.IllegalStateException: Duplicate key InventoryDetailDO

以下总结自以下链接 Java8 Duplicate key 异常解决-CSDN博客 原因&#xff1a;由于我们使用了jdk8的新特性中的stream流&#xff0c;将list转换为map集合&#xff0c;但是原来的list集合中存在重复的值&#xff0c;我们不知道如何进行取舍&#xff0c;所以报错 解决方式&…...

Python使用selenium访问网页完成登录——装饰器重试机制汇总

文章目录 示例一:常见装饰器编写重试机制示例二&#xff1a;使用类实现装饰器示例三&#xff1a;使用函数装饰器并返回闭包示例四&#xff1a;使用 wrapt 模块 示例一:常见装饰器编写重试机制 示例代码 import time import traceback import logging from typing import Call…...

“微软蓝屏”事件引发的深度思考:网络安全与系统稳定性的挑战与应对

“微软蓝屏”事件暴露了网络安全哪些问题&#xff1f; 近日&#xff0c;一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;不仅成为科技领域的热点新闻&#xff0c;更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件&#xff0c;源于美国电脑安全…...

2024.07纪念一 debezium : spring-boot结合debezium

使用前提&#xff1a; 一、mysql开启了logibin 在mysql的安装路径下的my.ini中 【mysqlid】下 添加 log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server_id1 # 配置 MySQL replaction 需要定义&#xff0c;不要和 canal 的 slaveId 重复 参考gitee的项目…...

mysql怎么查询json里面的字段

mysql怎么查询json里面的字段&#xff1a; 要在 MySQL 数据库中查询 JSON 字段中的 city 值&#xff0c;你可以使用 MySQL 提供的 JSON 函数。假设表名是 your_table&#xff0c;包含一个名为 json_column 的 JSON 字段。 以下是一个查询示例&#xff0c;展示如何从 json_colu…...

C++ 右值 左值引用

一.什么是左值引用 右值引用 1.左值引用 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可以对它赋值。定义时const修饰符后的左值&#xff0c;不能给他赋值&#xff0c;但是可以取它的地址。左值引用就是给左值的引用&#xff0c;给左…...

「JavaEE」Spring IoC 1:Bean 的存储

&#x1f387;个人主页 &#x1f387;所属专栏&#xff1a;Spring &#x1f387;欢迎点赞收藏加关注哦&#xff01; IoC 简介 IoC 全称 Inversion of Control&#xff0c;即控制反转 控制反转是指控制权反转&#xff1a;获得依赖对象的过程被反转了 传统开发模式中&…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...