无法使用Firefox从Tomcat注销

时间:2011-10-20 13:16:32

标签: firefox authentication tomcat cas

我使用Tomcat和CAS授权遇到了意想不到的问题。我只是无法在Firefox中注销。我被重定向到注销页面,但是一旦我在地址栏中重新输入应用程序URL,它就会被打开,好像我已经记录了(我实际上已经记录了!)。

首先,我已经花了大量的尝试来修复tomcat配置中的内容,然后我已经阅读了日志,但实际上在我想到检查其他浏览器中的注销行为之前没有任何帮助。

在其他浏览器中,一切都按预期工作。 我只是被困住了,如果有人给我一个提示,我会很感激。

我猜[这个问题] [1]在某种程度上与我的相关,但是,helas,禁用我应该登录的页面上的缓存也无济于事。

UPD:一些调试信息。 Firefox的版本是7.0.1,不幸的是,它不是公共应用程序,我不能提供任何网址。看起来像response.sendRedirect输出是Firefox缺失的东西。这是最小的代码,适用于除Firefox之外的任何浏览器。

 session.invalidate();
 response.sendRedirect("https://app:8552/cas/logout"); 

第一次请求 - 使会话无效并重定向到CAS注销页面

请求标题

  • 主持人:dev.service.net
  • User-Agent:Mozilla / 5.0(Macintosh; Intel Mac OS X 10.6; rv:7.0.1)Gecko / 20100101 Firefox / 7.0.1
  • 接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
  • 接受语言:en-us,en; q = 0.5
  • 接受编码:gzip,deflate
  • Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
  • 连接:keep-alive
  • Referer:http://dev.service.net/
  • Cookie:JSESSIONID = 53B9469EFE9F130E9694F7406BFAB755

响应标题

  • 服务器:nginx / 1.0.4
  • 日期:2011年10月20日星期四09:20:45 GMT
  • 内容类型:text / html
  • 内容长度:184
  • 地点:https://dev:8552/cas/logout

第二次请求 - cas logout页面本身

请求标题

  • 主持人:dev:8552
  • User-Agent:Mozilla / 5.0(Macintosh; Intel Mac OS X 10.6; rv:7.0.1)Gecko / 20100101 Firefox / 7.0.1
  • 接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
  • 接受语言:en-us,en; q = 0.5
  • 接受编码:gzip,deflate
  • Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
  • 连接:keep-alive
  • Referer:http://dev.service.net/
  • Cookie:JSESSIONID = 8A68F008825A0F0D14C6BF803E1332CF; GUEST_LANGUAGE_ID = EN_US; COOKIE_SUPPORT =真

响应标题

  • 服务器:Apache-Coyote / 1.1
  • Pragma:no-cache
  • 到期日:1970年1月1日星期四00:00:00 GMT
  • 缓存控制:无缓存,无存储
  • Content-Type:text / html; charset = UTF-8
  • 内容 - 语言:en-US
  • 内容长度:1226
  • 日期:2011年10月20日星期四15:53:57 GMT

第3次请求 - 我们重新回到实际应该的页面 将我们重定向到登录页面,但事实并非如此。

请求标题

  • 主持人:dev.service.net
  • User-Agent:Mozilla / 5.0(Macintosh; Intel Mac OS X 10.6; rv:7.0.1)Gecko / 20100101 Firefox / 7.0.1
  • 接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
  • 接受语言:en-us,en; q = 0.5
  • 接受编码:gzip,deflate
  • Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
  • 连接:keep-alive
  • Cookie:JSESSIONID = 53B9469EFE9F130E9694F7406BFAB755

响应标题

  • 服务器:Apache-Coyote / 1.1
  • Pragma:no-cache
  • 到期日:1970年1月1日星期四00:00:00 GMT
  • 缓存控制:无缓存,无存储
  • Content-Type:text / html; charset = UTF-8
  • 内容 - 语言:en-US
  • 内容长度:1226
  • 日期:2011年10月20日星期四13:30:51 GMT

1 个答案:

答案 0 :(得分:2)

根据标题,您在两个不同的主机上维护两个不同的会话。当您在第一台主机上请求注销时,您将被重定向到第二台主机(使用不同的会话cookie)。第二个主机的会话cookie反过来确实无效(根据Set-Cookie标头的存在)。但是基于上一个请求,会话尚未在服务器端重新创建(没有Set-Cookie标头)。这意味着session.invalidate()之前的response.sendRedirect()以某种方式失败,或者实际上是从浏览器缓存中请求了该页面。

在Firebug中,您应该能够通过检查 Net 选项卡中请求的文本颜色来查看是否从浏览器缓存中请求了该页面。如果它显示为灰色,则表示它已从浏览器缓存中提供。对于Firefox,must-revalidate标头旁边的no-cache, no-store标头实际上是强制性的。您需要配置服务器以将该条目添加到标头中,或者为此更改/创建Filter

另见: