CAS单点登录 v5.3.x:集成CAS和Spring Boot
发布时间: 2024-02-11 19:23:32 阅读量: 14 订阅数: 18
# 1. 介绍
## 1.1 CAS单点登录简介
CAS(Central Authentication Service),中文名为中央认证服务,是一种支持单点登录的开源框架。
CAS可以实现在多个Web应用系统中进行登录认证,在用户第一次登录某个应用系统时,需要通过CAS服务器进行认证,认证成功后,会在CAS服务器上生成一个全局的凭证(Ticket),供其他应用系统进行验证。用户在其他应用系统中访问受保护资源时,不需要再次输入账号和密码,CAS会自动完成认证过程,实现单点登录。
CAS的设计理念是通过将身份认证和访问控制解耦,使得应用系统不需要关心身份认证的具体实现方式,实现了认证与授权的分离。
## 1.2 Spring Boot简介
Spring Boot是一种用于减少Spring框架配置的快速开发框架。它通过提供默认的配置和约定,简化了Spring应用的开发过程。
Spring Boot的主要目标是使得开发者能够以最少的配置和代码量来构建Spring应用。它通过自动配置、启动器和嵌入式Web服务器等功能,大大简化了项目的开发和部署。
Spring Boot与CAS的结合可以使得CAS单点登录的开发更加简单高效,减少开发工作量,提高开发效率。
# 2. 环境准备
在开始CAS单点登录与Spring Boot集成之前,需要先进行环境准备。这包括搭建CAS服务器和创建Spring Boot项目。
### 2.1 CAS服务器搭建
CAS(Central Authentication Service)是一个开放的、企业级的单点登录解决方案。它采用了统一身份认证的方式,为多个应用系统提供了单点登录、单点登出的功能。
在本例中,我们将使用CAS 5.x版本作为单点登录服务器。您可以按照以下步骤搭建CAS服务器:
1. 下载CAS服务器 war 包或源码
2. 配置CAS服务端
3. 部署CAS服务器
### 2.2 Spring Boot项目创建
Spring Boot 是一个简化 Spring 应用开发的框架,它为基于Spring的应用快速开发提供了一种快捷方式。在本例中,我们将创建一个Spring Boot项目作为CAS的客户端。
您可以按照以下步骤创建Spring Boot项目:
1. 使用Spring Initializr初始化一个Spring Boot项目,选择所需的依赖和配置。
2. 配置CAS客户端依赖
3. 创建Spring Boot应用程序的基本结构
以上就是环境准备的基本步骤,接下来我们将深入探讨CAS单点登录的实现。
# 3. CAS单点登录实现
在本章中,我们将详细介绍如何使用CAS实现单点登录功能。首先,我们需要配置CAS服务器和创建一个基于Spring Boot的项目。
#### 3.1 CAS服务器配置
在搭建CAS服务器之前,我们需要先安装JDK和Tomcat。以下是配置CAS服务器的步骤:
1. 下载CAS服务器源码,并解压到Tomcat的webapps目录下。
2. 进入CAS服务器的源码目录,编辑`WEB-INF/deployerConfigContext.xml`文件,配置CAS服务端的配置项,如数据库连接、认证策略等。
3. 配置CAS服务端的认证授权策略,在`WEB-INF/src`目录下创建`cas.properties`文件,并添加以下配置:
```properties
cas.authn.policy.any.authentication.handler.name=MyAuthenticationHandler
cas.authn.policy.any.authentication.handler.order=1
cas.authn.policy.guest.authentication.handler.name=MyGuestAuthenticationHandler
cas.authn.policy.guest.authentication.handler.order=2
cas.authentication.policy.something.guest=false
```
4. 编译CAS服务端项目,执行以下命令:
```shell
cd CAS源码目录
./build.sh clean
./build.sh package
```
5. 启动Tomcat服务器,CAS服务端将会自动部署在Tomcat的根目录下。访问`http://localhost:8080/cas`,如果出现登录页面则说明CAS服务器配置成功。
#### 3.2 Spring Boot集成CAS
接下来,我们将创建一个基于Spring Boot的项目,并集成CAS。以下是配置Spring Boot集成CAS的步骤:
1. 在`pom.xml`文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-integration-spring</artifactId>
<version>3.6.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
</exclusions>
</dependency>
```
2. 在`application.properties`文件中添加以下配置:
```properties
cas.server.url.prefix=http://localhost:8080/cas
cas.server.login.url=http://localhost:8080/cas/login
cas.server.logout.url=http://localhost:8080/cas/logout
cas.validation-type=CAS3
cas.server-name=http://localhost:8081
```
3. 创建一个`CasConfig`类,并添加`@Configuration`注解:
```java
@Configuration
public class CasConfig {
@Bean
public CasAuthenticationFilter casAuthenticationFilter(AuthenticationManager authenticationManager, ServiceProperties serviceProperties) {
CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
casAuthenticationFilter.setAuthenticationManager(authenticationManager);
casAuthenticationFilter.setServiceProperties(serviceProperties);
return casAuthenticationFilter;
}
@Bean
public CasAuthenticationProvider casAuthenticationProvider() {
CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
casAuthenticationProvider.setKey("casAuthenticationProviderKey");
casAuthenticationProvider.setServiceProperties(serviceProperties());
casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService());
return casAuthenticationProvider;
}
@Bean
public ServiceProperties serviceProperties() {
ServiceProperties serviceProperties = new ServiceProperties();
serviceProperties.setService("http://localhost:8081/login/cas");
serviceProperties.setSendRenew(false);
return serviceProperties;
}
@Bean
public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {
CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();
casAuthenticationEntryPoint.setLoginUrl("http://localhost:8080/cas/login");
casAuthenticationEntryPoint.setServiceProperties(serviceProperties());
return casAuthenticationEntryPoint;
}
@Bean
public CasAuthenticationFilter casAuthenticationFilter(AuthenticationManager authenticationManager, ServiceProperties serviceProperties) {
CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
casAuthenticationFilter.setAuthenticationManager(authenticationManager);
casAuthenticationFilter.setServiceProperties(serviceProperties);
return casAuthenticationFilter;
}
@Bean
public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {
CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();
casAuthenticationEntryPoint.setLoginUrl("http://localhost:8080/cas/login");
casAuthenticationEntryPoint.setServiceProperties(serviceProperties());
return casAuthenticationEntryPoint;
}
@Bean
public FilterRegistrationBean<CasAuthenticationFilter> casAuthenticationFilterRegistration(CasAuthenticationFilter casAuthenticationFilter) {
FilterRegistrationBean<CasAuthenticationFilter> registration = new FilterRegistrationBean<>(casAuthenticationFilter);
registration.setEnabled(false);
return registration;
}
@Bean
public LogoutFilter requestSingleLogoutFilter() {
LogoutFilter logoutFilter = new LogoutFilter("http://localhost:8080/cas/logout", new SecurityContextLogoutHandler());
logoutFilter.setFilterProcessesUrl("/logout/cas");
return logoutFilter;
}
@Bean
public SingleLogoutFilter singleLogoutFilter() {
SingleLogoutFilter logoutFilter = new SingleLogoutFilter("http://localhost:8080/cas/logout", new SecurityContextLogoutHandler());
logoutFilter.setFilterProcessesUrl("/slogout");
return logoutFilter;
}
@Bean
public CustomUserDetailsService customUserDetailsService() {
return new CustomUserDet
```
0
0