SpringBoot-CAS單點退出
阿新 • • 發佈:2019-02-03
cas-server預設配置的單點退出並沒有做到真正的單點退出(在一個客戶端退出時,另一個已經登入的客戶端還能訪問)。
由於我的專案是springboot,所以就介紹在springboot下怎麼設定單點退出。
與spring設定單點退出相類似,cas官網已經內建了此類功能,我們只需要加入一個攔截器與監聽器就好。由於剛接觸springboot,配置攔截器與監聽器用了不少時間。而且在此期間發現FilterRegistrationBean中的setOrder設定攔截器順序並不起作用,最後只能通過放置順序控制攔截器的執行順序。
SingleSignOutFilter攔截器設定,需要是第一個載入的攔截器。
@Bean public SingleSignOutFilter singleSignOutFilter(){ return new SingleSignOutFilter(); } @Bean public FilterRegistrationBean singleSignOutFilterBean(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(singleSignOutFilter());// filterRegistrationBean.addInitParameter("targetFilterLifecycle","true") filterRegistrationBean.setEnabled(true); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.setOrder(1); filterRegistrationBean.setName("singleFilter"); System.out.println("================================singleFilter執行"); return filterRegistrationBean; }
public SingleSignOutHttpSessionListener singleSignOutHttpSessionListener(){ return new SingleSignOutHttpSessionListener(); } @Bean public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListenerBean(){ ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listenerRegistrationBean= new ServletListenerRegistrationBean<>(); listenerRegistrationBean.setEnabled(true); listenerRegistrationBean.setListener(singleSignOutHttpSessionListener()); listenerRegistrationBean.setOrder(3); listenerRegistrationBean.setName("singleListener"); System.out.println("================================singleListener執行"); return listenerRegistrationBean; }