为了帮助没搞定的人,毕竟自己踩了很多坑,一步一步爬过来的,有什么不足之处可以给建议 谢谢(小部分代码是整合他人的)
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> singleSignOutHttpSessionListener() { ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener=new ServletListenerRegistrationBean<>(); listener.setEnabled(casEnabled); listener.setListener(new SingleSignOutHttpSessionListener()); listener.setOrder(1); return listener; } @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; } @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(" @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(" @Bean public FilterRegistrationBean cas20ProxyReceivingTicketValidationFilter() { FilterRegistrationBean filterRegistration=new FilterRegistrationBean(); Cas20ProxyReceivingTicketValidationFilter cas20ProxyReceivingTicketValidationFilter=new Cas20ProxyReceivingTicketValidationFilter(); //cas20ProxyReceivingTicketValidationFilter.setTicketValidator(cas20ServiceTicketValidator()); cas20ProxyReceivingTicketValidationFilter.setServerName(autoconfig.getServerName()); filterRegistration.setFilter(cas20ProxyReceivingTicketValidationFilter); filterRegistration.setEnabled(casEnabled); if(autoconfig.getValidateFilters().size()>0) filterRegistration.setUrlPatterns(autoconfig.getValidateFilters()); else filterRegistration.addUrlPatterns(" @Bean public FilterRegistrationBean httpServletRequestWrapperFilter() { FilterRegistrationBean filterRegistration=new FilterRegistrationBean(); filterRegistration.setFilter(new HttpServletRequestWrapperFilter()); filterRegistration.setEnabled(true); if(autoconfig.getRequestWrapperFilters().size()>0) filterRegistration.setUrlPatterns(autoconfig.getRequestWrapperFilters()); else filterRegistration.addUrlPatterns(" @Bean public FilterRegistrationBean assertionThreadLocalFilter() { FilterRegistrationBean filterRegistration=new FilterRegistrationBean(); filterRegistration.setFilter(new AssertionThreadLocalFilter()); filterRegistration.setEnabled(true); if(autoconfig.getAssertionFilters().size()>0) filterRegistration.setUrlPatterns(autoconfig.getAssertionFilters()); else filterRegistration.addUrlPatterns("/*"); filterRegistration.setOrder(7); return filterRegistration; } }
2.为了让你们更省力且直接的看到效果,我把相关配置也贴出来