1. 程式人生 > >SpringBoot-CAS單點退出

SpringBoot-CAS單點退出

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;
}