8

我刚刚制作了一个 HelloWorld servlet 并在其上实现了 CAS。我可以毫无问题地登录,CAS 正在我的浏览器中设置 3 个 cookie,即 CASGT,为 /cas 设置 2 个 JSESSIONID 1,为 /helloWorld 设置另一个

问题是,然后我访问https://blah:8443/cas/logout,我看到注销成功屏幕但 cookie 仍在我的浏览器中,所以我没有被注销,我可以再次进入/helloWorld 没有显示登录屏幕。

您知道我应该如何让 CAS 删除它在我注销时创建的 cookie 吗?

提前致谢

4

2 回答 2

7

CASGT cookie 由 CAS 设置,应该由它取消设置。CAS 注销程序的工作方式如下:

  1. 您实际上去了 CAS 注销页面。该页面应该知道您要从中注销的应用程序。一种方法是从您的应用程序重定向到 CAS 注销页面,提供重定向返回 URL 作为参数。

  2. 您的 cookie 被删除,然后您将通过 POST 请求重定向到您的应用程序。

  3. SingleSignOutFilter捕获一个特殊参数“logoutRequest”,实际上破坏了它从一开始就持有的票证/会话映射,并使当前会话无效。

为了调试 CAS,启用TRACE级别日志记录。这样,您将知道是否收到了正确的请求或会话是否已失效。

我还建议你看一下org.jasig.cas.client.sessionpackage的代码,很简单。

于 2012-02-24T19:21:27.050 回答
4

You should check the documentation on CAS single sign out which can be found here. It says:

Where Single Sign Out Works:

Clients / Languages whose session management is maintained on the server side. CAS clients can then access session information to end the session.

Where Single Sign Out Doesn't Work:

Clients / Languages whose only session management consists of cookies. CAS does not have access to the browser's cookies and cannot therefore terminate a session. (however, closing a browser window should do that)

And I think that's pretty much your case. Cookie based it's not possible to do a SSout, but if you can use a framework like Spring (as we do in our projects) the SSout is easy to configure and comes in very handy

于 2012-03-16T13:10:28.883 回答