CAS client客户端的配置,使用java config的方式

本文介绍如何通过JavaConfig方式配置CAS客户端,包括定义认证规则、配置CAS server相关信息、设置认证过滤器及入口等关键步骤。

CAS客户端的配置,使用java config的方式

一、建一个类继承WebSecurityConfigurerAdapter,并且给该类加注解@EnableWebSecurity。这个类同时也是Spring Security认证相关的类,其中的configure方法就是对HTTP请求设置认证规则的。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http.anyRequest().authenticated()
	.and()
	// 登录认证例外处理入口为cas入口
	.exceptionHandling().authenticationEntryPoint(casEntryPoint())
	.and()
	// 登录CAS认证过滤器
	.addFilter(casFilter());

}


二、org.springframework.security.cas.ServiceProperties

定义这个Bean的作用是配置CAS server的相关信息

<span style="white-space:pre">	</span>@Bean
	ServiceProperties serviceProperties() {
		ServiceProperties serviceProperties = new ServiceProperties();
		// 验证ST的CAS server url:被CasAuthenticationFilter监听的URL
		serviceProperties.setService("https://127.0.0.1/cas/validate/ticket");
		// sendRenew默认是false,true则意味着不允许单点登录,用户需要重新输入用户名密码以验证
		// 在安全级别要求比较高的情况下可以使用
		serviceProperties.setSendRenew(false);
		// 认证所有的
		serviceProperties.setAuthenticateAllArtifacts(true);
		return serviceProperties;
	}

XML的配置方法

<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
<span style="white-space:pre">	</span><property name="service" value="https://localhost:8443/cas-sample/login/cas"/>
<span style="white-space:pre">	</span><property name="sendRenew" value="false"/>
</bean>


三、

	// 它包含的属性可以定制一些如认证成功和失败后的行为
	@Bean
	CasAuthenticationFilter casFilter() {
		CasAuthenticationFilter casFilter = new CasAuthenticationFilter();
		casFilter.setAuthenticationManager(authenticationManager);
		// ServiceAuthenticationDetailsSource: Provides an additional details object for a given web request.
		// casFilter.setAuthenticationDetailsSource(new ServiceAuthenticationDetailsSource(serviceProperties()));
		return casFilter;
	}
	
	// 指定使用认证的入口:CAS server
	@Bean
	CasAuthenticationEntryPoint casEntryPoint() {
		CasAuthenticationEntryPoint casEntryPoint = new CasAuthenticationEntryPoint();
		// This is where the user’s browser will be redirected if no ST
		casEntryPoint.setLoginUrl("https://127.0.0.1:8080/cas/entrypoint");
		// provides the URL to the CAS server
		casEntryPoint.setServiceProperties(serviceProperties());
		return casEntryPoint;
	}
	
	// CasAuthenticationProvider使用UserDetailsService来保存用户权限
	@Bean
	CasAuthenticationProvider casAuthenticationProvider() {
		CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
		casAuthenticationProvider.setAuthenticationUserDetailsService(userDetailsByNameServiceWrapper());
		casAuthenticationProvider.setServiceProperties(serviceProperties());
		// ST验证器
		casAuthenticationProvider.setTicketValidator(ticketValidator());
		// key is an_id_for_this_auth_provider_only,这个大概就是...
		String key = UUID.randomUUID().toString();
		System.out.println("----------------CasAuthenticationProvider的key是:"+key);
		casAuthenticationProvider.setKey(key);
		return casAuthenticationProvider;
	}
	
	@Bean
	UserDetailsByNameServiceWrapper<CasAssertionAuthenticationToken> userDetailsByNameServiceWrapper() {
		UserDetailsByNameServiceWrapper<CasAssertionAuthenticationToken> userDetailsByNameServiceWrapper = new UserDetailsByNameServiceWrapper<CasAssertionAuthenticationToken>(userDetailsService);
		return userDetailsByNameServiceWrapper;
	}
	
	// 定义CAS server的ticket验证器,参数是CAS server的url前缀
	@Bean
	Cas20ServiceTicketValidator ticketValidator() {
		// 参数是 CAS server url prefix 前缀
		Cas20ServiceTicketValidator ticketValidator = new Cas20ServiceTicketValidator("https://127.0.0.1:8080/cas");
		return ticketValidator;
	}







评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值