技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類(lèi) >

spring boot整合CAS配置詳細(xì)教程

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2017-10-19 06:08┆點(diǎn)擊:

為了幫助沒(méi)搞定的人,畢竟自己踩了很多坑,一步一步爬過(guò)來(lái)的,有什么不足之處可以給建議  謝謝(小部分代碼是整合他人的)

1.不多廢話(huà),直接上最重要的代碼,以下代碼整合cas的重要過(guò)程

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(); } /** * 用于實(shí)現(xiàn)單點(diǎn)登出功能 */ @Bean public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListener() { ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener = new ServletListenerRegistrationBean<>(); listener.setEnabled(casEnabled); listener.setListener(new SingleSignOutHttpSessionListener()); listener.setOrder(1); return listener; } /** * 該過(guò)濾器用于實(shí)現(xiàn)單點(diǎn)登出功能,單點(diǎn)退出配置,一定要放在其他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; } /** * 該過(guò)濾器用于實(shí)現(xiàn)單點(diǎn)登出功能,單點(diǎn)退出配置,一定要放在其他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; } /** * 該過(guò)濾器負(fù)責(zé)用戶(hù)的認(rèn)證工作 */ @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服務(wù)的登陸url filterRegistration.addInitParameter("casServerLoginUrl", autoconfig.getCasServerLoginUrl()); //本項(xiàng)目登錄ip+port filterRegistration.addInitParameter("serverName", autoconfig.getServerName()); filterRegistration.addInitParameter("useSession", autoconfig.isUseSession()?"true":"false"); filterRegistration.addInitParameter("redirectAfterValidation", autoconfig.isRedirectAfterValidation()?"true":"false"); filterRegistration.setOrder(4); return filterRegistration; } /** * 該過(guò)濾器負(fù)責(zé)對(duì)Ticket的校驗(yàn)工作 */ @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("/*"); filterRegistration.addInitParameter("casServerUrlPrefix", autoconfig.getCasServerUrlPrefix()); filterRegistration.addInitParameter("serverName", autoconfig.getServerName()); filterRegistration.setOrder(5); return filterRegistration; } /** * 該過(guò)濾器對(duì)HttpServletRequest請(qǐng)求包裝, 可通過(guò)HttpServletRequest的getRemoteUser()方法獲得登錄用戶(hù)的登錄名 * */ @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("/*"); filterRegistration.setOrder(6); return filterRegistration; } /** * 該過(guò)濾器使得可以通過(guò)org.jasig.cas.client.util.AssertionHolder來(lái)獲取用戶(hù)的登錄名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 這個(gè)類(lèi)把Assertion信息放在ThreadLocal變量中,這樣應(yīng)用程序不在web層也能夠獲取到當(dāng)前登錄信息 */ @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.為了讓你們更省力且直接的看到效果,我把相關(guān)配置也貼出來(lái)