springboot 如何调用cas-client-autoconfig-support 解析ticket
时间: 2023-04-05 14:05:25 浏览: 188
可以使用Spring Security CAS扩展来实现。在pom.xml文件中添加以下依赖项:
```
<dependency>
<groupId>org.springframework.security.extensions</groupId>
<artifactId>spring-security-cas</artifactId>
<version>1.0.7.RELEASE</version>
</dependency>
```
然后在application.properties文件中添加以下配置:
```
# CAS server URL
cas.server.url=https://cas.example.com/cas
# CAS server login URL
cas.server.login.url=https://cas.example.com/cas/login
# CAS server logout URL
cas.server.logout.url=https://cas.example.com/cas/logout
# CAS service URL
cas.service.url=http://localhost:8080/login/cas
# CAS service name
cas.service.name=MyApp
# CAS service login URL
cas.service.login.url=http://localhost:8080/login
# CAS service logout URL
cas.service.logout.url=http://localhost:8080/logout
# CAS service validate URL
cas.service.validate.url=https://cas.example.com/cas/serviceValidate
# CAS service ticket parameter name
cas.service.ticket.parameterName=ticket
# CAS service renew parameter name
cas.service.renew.parameterName=renew
# CAS service gateway parameter name
cas.service.gateway.parameterName=gateway
# CAS service artifact parameter name
cas.service.artifact.parameterName=artifact
# CAS service proxy callback URL
cas.service.proxy.callbackUrl=http://localhost:8080/proxyCallback
# CAS service proxy callback parameter name
cas.service.proxy.callbackParameterName=pgtIou
# CAS service proxy granting ticket parameter name
cas.service.proxy.grantingTicket.parameterName=pgtIou
# CAS service proxy granting ticket storage class
cas.service.proxy.grantingTicket.storageClass=org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl
# CAS service proxy granting ticket storage file
cas.service.proxy.grantingTicket.storageFile=/tmp/cas-proxy-granting-tickets
# CAS service proxy granting ticket storage clean interval
cas.service.proxy.grantingTicket.storageCleanInterval=3600000
# CAS service proxy granting ticket storage clean up
cas.service.proxy.grantingTicket.storageCleanUp=true
# CAS service proxy granting ticket storage clean up interval
cas.service.proxy.grantingTicket.storageCleanUpInterval=3600000
# CAS service proxy granting ticket storage clean up max age
cas.service.proxy.grantingTicket.storageCleanUpMaxAge=7200000
```
然后在Spring Boot应用程序中添加以下配置类:
```
@Configuration
@EnableWebSecurity
@EnableCasSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CasAuthenticationEntryPoint casAuthenticationEntryPoint;
@Autowired
private CasAuthenticationProvider casAuthenticationProvider;
@Autowired
private SingleSignOutFilter singleSignOutFilter;
@Autowired
private CasAuthenticationFilter casAuthenticationFilter;
@Autowired
private CasProperties casProperties;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.exceptionHandling()
.authenticationEntryPoint(casAuthenticationEntryPoint)
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/")
.addLogoutHandler(new SingleSignOutHandler(casProperties.getServer().getLogoutUrl()))
.and()
.addFilterBefore(singleSignOutFilter, CasAuthenticationFilter.class)
.addFilter(casAuthenticationFilter);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(casAuthenticationProvider);
}
@Bean
public ServiceProperties serviceProperties() {
ServiceProperties serviceProperties = new ServiceProperties();
serviceProperties.setService(casProperties.getService().getUrl());
serviceProperties.setSendRenew(false);
return serviceProperties;
}
@Bean
public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {
CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();
casAuthenticationEntryPoint.setLoginUrl(casProperties.getServer().getLoginUrl());
casAuthenticationEntryPoint.setServiceProperties(serviceProperties());
return casAuthenticationEntryPoint;
}
@Bean
public CasAuthenticationProvider casAuthenticationProvider() {
CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
casAuthenticationProvider.setAuthenticationUserDetailsService(new UserDetailsServiceImpl());
casAuthenticationProvider.setServiceProperties(serviceProperties());
casAuthenticationProvider.setTicketValidator(new Cas30ServiceTicketValidator(casProperties.getServer().getUrl()));
casAuthenticationProvider.setKey("casAuthenticationProviderKey");
return casAuthenticationProvider;
}
@Bean
public SingleSignOutFilter singleSignOutFilter() {
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
singleSignOutFilter.setCasServerUrlPrefix(casProperties.getServer().getUrl());
singleSignOutFilter.setIgnoreInitConfiguration(true);
return singleSignOutFilter;
}
@Bean
public CasAuthenticationFilter casAuthenticationFilter() {
CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
casAuthenticationFilter.setAuthenticationManager(authenticationManager());
casAuthenticationFilter.setFilterProcessesUrl("/login/cas");
return casAuthenticationFilter;
}
}
```
最后,在Spring Boot应用程序中添加以下服务类:
```
@Service
public class UserDetailsServiceImpl implements AuthenticationUserDetailsService<CasAssertionAuthenticationToken> {
@Override
public UserDetails loadUserDetails(CasAssertionAuthenticationToken token) throws UsernameNotFoundException {
String username = token.getName();
List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("ROLE_USER");
return new User(username, "", authorities);
}
}
```
现在,您可以使用Spring Boot应用程序调用CAS客户端自动配置支持来解析票据。
阅读全文