1

我目前尝试实现一个 CAS 客户端,一切正常:身份验证和注销过程就像一个魅力。这是我的单点注销流程代码:

@Bean
public FilterRegistrationBean singleSignOutFilterRegister() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    SingleSignOutFilter filter = new SingleSignOutFilter();
    Map<String, String> map = new HashMap<String, String>();
    map.put("casServerUrlPrefix", this.logoutUrl);
    registration.setInitParameters(map);
    registration.setFilter(filter);
    registration.setEnabled(true);
    registration.setOrder(1);
    return registration;
}

@EventListener
public SingleSignOutHttpSessionListener singleSignOutHttpSessionListener(HttpSessionEvent event) {
    return new SingleSignOutHttpSessionListener();
}

我这样做是因为在我经历过的每个教程中,他们都说要放 aSingleSignOutFilterSingleSignOutHttpSessionListener. 所以它有效,但是深入研究这些类中的每一个,我不了解SingleSignOutHttpSessionListener. 如果我删除它,它仍然可以正常工作,但我在这个论坛中看到,有时会话不会被过滤器破坏。

我的问题是:它是如何发生的,什么时候发生的,以及如何重现它来测试它?

4

1 回答 1

1

它是如何发生的,何时发生的,以及如何重现它来测试它?

该论坛指出:

会话并不总是被过滤器破坏(即它们​​事先变得无效或有人没有退出 CAS)。Listener 处理这种情况。

在应用程序会话在 CAS SSO 会话超时之前超时的情况下,(意味着 SLO 过滤器还没有机会拦截 SLO 消息,因为 CAS 还没有机会注销),侦听器开始删除来自会话存储映射的所需信息。这可能会发生,因为应用程序超时发生在 CAS 会话超时之前,绕过发送 SLO 消息的 CAS 注销功能,以便 SLO 过滤器完成其工作。

于 2018-10-16T09:35:53.083 回答