springboot整个cas_Spring Boot 使用Spring security 集成CAS - CSDN博客

本文档详细介绍了如何在Spring Boot应用中使用Spring Security集成CAS进行身份验证。通过配置`SecurityConfig`类,实现了CAS认证入口、服务属性、认证过滤器、认证提供者以及单点登出等功能。同时,文中使用了自定义的`CustomUserDetailsService`来处理用户详情。
摘要由CSDN通过智能技术生成

package com.chengli.springboot.security;

import org.jasig.cas.client.session.SingleSignOutFilter;

import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

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.cas.web.CasAuthenticationFilter;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import org.springframework.security.core.userdetails.AuthenticationUserDetailsService;

import org.springframework.security.web.authentication.logout.LogoutFilter;

import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;

import com.chengli.springboot.custom.CustomUserDetailsService;

import com.chengli.springboot.properties.CasProperties;

@Configuration

@EnableWebSecurity //启用web权限

@EnableGlobalMethodSecurity(prePostEnabled = true) //启用方法验证

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

private CasProperties casProperties;

/**定义认证用户信息获取来源,密码校验规则等*/

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

super.configure(auth);

auth.authenticationProvider(casAuthenticationProvider());

//inMemoryAuthentication 从内存中获取

//auth.inMemoryAuthentication().withUser("chengli").password("123456").roles("USER")

//.and().withUser("admin").password("123456").roles("ADMIN");

//jdbcAuthentication从数据库中获取,但是默认是以security提供的表结构

//usersByUsernameQuery 指定查询用户SQL

//authoritiesByUsernameQuery 指定查询权限SQL

//auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery(query).authoritiesByUsernameQuery(query);

//注入userDetailsService,需要实现userDetailsService接口

//auth.userDetailsService(userDetailsService);

}

/**定义安全策略*/

@Override

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests()//配置安全策略

//.antMatchers("/","/hello").permitAll()//定义/请求不需要验证

.anyRequest().authenticated()//其余的所有请求都需要验证

.and()

.logout()

.permitAll()//定义logout不需要验证

.and()

.formLogin();//使用form表单登录

http.exceptionHandling().authenticationEntryPoint(casAuthenticationEntryPoint())

.and()

.addFilter(casAuthenticationFilter())

.addFilterBefore(casLogoutFilter(), LogoutFilter.class)

.addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class);

//http.csrf().disable(); //禁用CSRF

}

/**认证的入口*/

@Bean

public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {

CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();

casAuthenticationEntryPoint.setLoginUrl(casProperties.getCasServerLoginUrl());

casAuthenticationEntryPoint.setServiceProperties(serviceProperties());

return casAuthenticationEntryPoint;

}

/**指定service相关信息*/

@Bean

public ServiceProperties serviceProperties() {

ServiceProperties serviceProperties = new ServiceProperties();

serviceProperties.setService(casProperties.getAppServerUrl() + casProperties.getAppLoginUrl());

serviceProperties.setAuthenticateAllArtifacts(true);

return serviceProperties;

}

/**CAS认证过滤器*/

@Bean

public CasAuthenticationFilter casAuthenticationFilter() throws Exception {

CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();

casAuthenticationFilter.setAuthenticationManager(authenticationManager());

casAuthenticationFilter.setFilterProcessesUrl(casProperties.getAppLoginUrl());

return casAuthenticationFilter;

}

/**cas 认证 Provider*/

@Bean

public CasAuthenticationProvider casAuthenticationProvider() {

CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();

casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService());

//casAuthenticationProvider.setUserDetailsService(customUserDetailsService()); //这里只是接口类型,实现的接口不一样,都可以的。

casAuthenticationProvider.setServiceProperties(serviceProperties());

casAuthenticationProvider.setTicketValidator(cas20ServiceTicketValidator());

casAuthenticationProvider.setKey("casAuthenticationProviderKey");

return casAuthenticationProvider;

}

/*@Bean

public UserDetailsService customUserDetailsService(){

return new CustomUserDetailsService();

}*/

/**用户自定义的AuthenticationUserDetailsService*/

@Bean

public AuthenticationUserDetailsService customUserDetailsService(){

return new CustomUserDetailsService();

}

@Bean

public Cas20ServiceTicketValidator cas20ServiceTicketValidator() {

return new Cas20ServiceTicketValidator(casProperties.getCasServerUrl());

}

/**单点登出过滤器*/

@Bean

public SingleSignOutFilter singleSignOutFilter() {

SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();

singleSignOutFilter.setCasServerUrlPrefix(casProperties.getCasServerUrl());

singleSignOutFilter.setIgnoreInitConfiguration(true);

return singleSignOutFilter;

}

/**请求单点退出过滤器*/

@Bean

public LogoutFilter casLogoutFilter() {

LogoutFilter logoutFilter = new LogoutFilter(casProperties.getCasServerLogoutUrl(), new SecurityContextLogoutHandler());

logoutFilter.setFilterProcessesUrl(casProperties.getAppLogoutUrl());

return logoutFilter;

}

}

Spring Security是一个用于处理认证和授权的框架。它提供了一套强大的安全功能,帮助我们保护我们的应用程序免受未经授权的访问。 单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户使用一组凭据(例如用户名和密码)登录到多个应用程序或网站。它的核心思想是用户只需要登录一次,然后就能访问所有受信任的应用程序而无需再次认证。 在Spring Security中,实现单点登录的常见方法是使用集中式认证服务(例如OAuth、CAS等)来进行身份验证和授权管理。这些服务允许用户在一个地方进行登录,然后将令牌或票据传递给其他受信任的应用程序。这样,用户只需要进行一次登录,就可以无缝地访问多个应用程序。 要实现单点登录,我们可以使用Spring SecuritySpring Boot集成并配置适当的认证机制和授权策略。我们可以使用Spring Security提供的注解和过滤器来保护我们的应用程序,并使用集中式认证服务处理用户的登录和授权。 总结起来,Spring Security是一个用于处理认证和授权的框架,可以与单点登录集成,实现用户在多个应用程序之间的无缝访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用Spring Security实现单点登录](https://blog.csdn.net/m0_64714024/article/details/125549592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值