springboot整个cas_spring boot整合CAS配置详解

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 04:07   11   0

在下不才,以下是我花了好几天的时间才整合出来的在spring boot里面的CAS配置整合

为了帮助没搞定的人,毕竟自己踩了很多坑,一步一步爬过来的,有什么不足之处可以给建议 谢谢(小部分代码是整合他人的)

1.不多废话,直接上最重要的代码,以下代码整合cas的重要过程

import org.jasig.cas.client.authentication.AuthenticationFilter;

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

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

import org.jasig.cas.client.util.AssertionThreadLocalFilter;

import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;

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

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

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

import org.springframework.boot.web.servlet.FilterRegistrationBean;

import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.cas.ServiceProperties;

import org.springframework.security.cas.authentication.CasAuthenticationProvider;

import org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService;

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

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

import java.util.List;

@Configuration

public class CasConfig {

@Autowired

SpringCasAutoconfig autoconfig;

private static boolean casEnabled = true;

public CasConfig() {

}

@Bean

public SpringCasAutoconfig getSpringCasAutoconfig(){

return new SpringCasAutoconfig();

}

/**

* 用于实现单点登出功能

*/

@Bean

public ServletListenerRegistrationBean singleSignOutHttpSessionListener() {

ServletListenerRegistrationBean listener = new ServletListenerRegistrationBean<>();

listener.setEnabled(casEnabled);

listener.setListener(new SingleSignOutHttpSessionListener());

listener.setOrder(1);

return listener;

}

/**

* 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前

*/

@Bean

public FilterRegistrationBean logOutFilter() {

FilterRegistrationBean filterRegistration = new FilterRegistrationBean();

LogoutFilter logoutFilter = new LogoutFilter(autoconfig.getCasServerUrlPrefix() + "/logout?service=" + autoconfig.getServerName(),new SecurityContextLogoutHandler());

filterRegistration.setFilter(logoutFilter);

filterRegistration.setEnabled(casEnabled);

if(autoconfig.getSignOutFilters().size()>0)

filterRegistration.setUrlPatterns(autoconfig.getSignOutFilters());

else

filterRegistration.addUrlPatterns("/logout");

filterRegistration.addInitParameter("casServerUrlPrefix", autoconfig.getCasServerUrlPrefix());

filterRegistration.addInitParameter("serverName", autoconfig.getServerName());

filterRegistration.setOrder(2);

return filterRegistration;

}

/**

* 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前

*/

@Bean

public FilterRegistrationBean singleSignOutFilter() {

FilterRegistrationBean filterRegistration = new FilterRegistrationBean();

filterRegistration.setFilter(new SingleSignOutFilter());

filterRegistration.setEnabled(casEnabled);

if(autoconfig.getSignOutFilters().size()>0)

filterRegistration.setUrlPatterns(autoconfig.getSignOutFilters());

else

filterRegistration.addUrlPatterns("/*");

filterRegistration.addInitParameter("casServerUrlPrefix", autoconfig.getCasServerUrlPrefix());

filterRegistration.addInitParameter("serverName", autoconfig.getServerName());

filterRegistration.setOrder(3);

return filterRegistration;

}

/**

* 该过滤器负责用户的认证工作

*/

@Bean

public FilterRegistrationBean authenticationFilter() {

FilterRegistrationBean filterRegistration = new FilterRegistrationBean();

filterRegistration.setFilter(new AuthenticationFilter());

filterRegistration.setEnabled(casEnabled);

if(autoconfig.getAuthFilters().size()>0)

filterRegistration.setUrlPatterns(autoconfig.getAuthFilters());

else

filterRegistration.addUrlPatterns("/*");

//casServerLoginUrl:cas服务的登陆url

filterRegistration.addInitParameter("casServerLoginUrl", autoconfig.getCasServerLoginUrl());

//本项目登录ip+port

filterRegistration.addInitParameter(!tring casServerUrlPrefix) {

this.casServerUrlPrefix = casServerUrlPrefix;

}

public String getCasServerLoginUrl() {

return casServerLoginUrl;

}

public void setCasServerLoginUrl(String casServerLoginUrl) {

this.casServerLoginUrl = casServerLoginUrl;

}

public String getServerName() {

return serverName;

}

public void setServerName(String serverName) {

this.serverName = serverName;

}

public boolean isRedirectAfterValidation() {

return redirectAfterValidation;

}

public void setRedirectAfterValidation(boolean redirectAfterValidation) {

this.redirectAfterValidation = redirectAfterValidation;

}

public boolean isUseSession() {

return useSession;

}

public void setUseSession(boolean useSession) {

this.useSession = useSession;

}

}

3.配置文件 dev.yml

#cas client config

spring:cas:

sign-out-filters: /logout

auth-filters: /*

validate-filters: /*

request-wrapper-filters: /*

assertion-filters: /*

cas-server-login-url: cas登录url

cas-server-url-prefix:cas登录域名

redirect-after-validation: true

use-session: true

server-name: http://localhost:8080

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP