Java CAS单信号滤波器

Java CAS单信号滤波器,java,cookies,single-sign-on,cas,jsessionid,Java,Cookies,Single Sign On,Cas,Jsessionid,我遵循了构建cas.war(v4.0.0)并将其部署到Tomcat7的步骤。当我启动Tomcat时,我可以在以下位置访问我的CAS登录页面: https://localhost:8443/cas/login 然后,我部署了我的一个“客户端”应用程序(一个使用Shiro进行身份验证的Grails web应用程序),该应用程序在以下位置上线: http://localhost:9100/myapp 我转到myapp的经过身份验证的URL: http://localhost:9100/myapp/

我遵循了构建cas.war(v4.0.0)并将其部署到Tomcat7的步骤。当我启动Tomcat时,我可以在以下位置访问我的CAS登录页面:

https://localhost:8443/cas/login
然后,我部署了我的一个“客户端”应用程序(一个使用Shiro进行身份验证的Grails web应用程序),该应用程序在以下位置上线:

http://localhost:9100/myapp
我转到
myapp
的经过身份验证的URL:

http://localhost:9100/myapp/secret
我已成功重定向到我的CAS登录页面(目前,我使用的是默认的
casLoginView.jsp
)。我检查我的浏览器cookies,对于CAS站点,我有一个
JSESSIONID
。我使用CAS默认凭据登录(用户名为Causser;密码为瓜),并成功重定向到
http://localhost:9100/myapp/secret
。非常成功!我再次检查我的cookie,发现我有相同的
JSESSIONID
以及一个新的
CASTGC
cookie

我现在直接转到我的CAS注销页面:

https://localhost:8443/cas/logout
我看到“注销成功”消息,并再次检查我的cookie。
CASTGC
cookie不见了,我还有一个
JSESSIONID
,但是,它与我得到的第一个
JSESSIONID
不同

现在,我返回到经过身份验证的URL:

http://localhost:9100/myapp/secret
我希望被重定向到CAS登录页面:相反,我被允许查看
/secret
页面,并且即使在注销后,看起来仍然是经过身份验证的

我相信我需要实现
SingleSignOutFilter
,方法是将它放在
myapp
web.xml

我需要知道的是:
  • web.xml
    中配置
    SingleSignOutFilter
    是否将完成我的单次注销实现,或者我还需要进行更多配置
  • 一旦实现了单点注销,它是否具有我上面描述的预期行为?也就是说,如果我转到
    /logout
    链接,那么每当我尝试转到经过身份验证的URL时,它都会将我重定向回
    /login
    页面
  • 我如何知道我使用的是哪种协议(CAS 2.0或SAML 1.1)?我应该使用CAS 4.0.0附带的默认版本,因为我没有覆盖项目中的任何内容
  • JSESSIONID
    CASTGC
    之间有什么区别?服务器如何处理/使用它们
  • 我是否需要在
    cas servlet.xml
    中配置任何东西以使单点注销生效?如果是,什么?如果没有,该文件用于什么
我需要知道的是:
  • web.xml
    中配置
    SingleSignOutFilter
    是否将完成我的 单点注销的实现,还是我需要更多的配置 需要做什么
是的,当然。但是为了避免资源泄漏,您应该遵循指南,并在web.xml中添加一个
SingleSignOutHttpSessionListener
。有关客户端的完整设置,请参阅。不要忘记将Github页面切换到您使用的CAS客户端版本。(注意它可能包含打字错误。)

  • 一旦实施单点注销,是否会达到预期效果 我上面描述的行为?意思是,如果我进入
    /logout
    链接,然后每当我尝试转到经过身份验证的URL时,它都应该 将我重定向回
    /login
    页面
当然,这就是单一注销机制的要点——它会破坏相应客户端应用程序中的所有会话——只要它们能够处理在
/logout
上从CAS发出的注销回调

  • 我如何知道我使用的是哪种协议(CAS 2.0或SAML 1.1)?我 应该使用CAS 4.0.0附带的默认版本,而我没有使用 覆盖我项目中的任何内容
如果您不知道为您的CAS或客户端应用程序配置SAML,那么您肯定会使用CAS协议

  • JSESSIONID
    CASTGC
    之间有什么区别?你好吗 服务器是否处理/使用了不同的数据
CASTGC
cookie是CAS会话标识符的持有者(会话,从技术上讲是票证,由CAS在其自己的映射式结构中管理)。这是只有您和CAS服务器知道的秘密。Java应用程序使用
JSESSIONID
cookie来标识规范中定义的应用程序会话。具体来说,CAS主要用于跟踪您当前的演唱过程

  • 我是否需要在
    cas servlet.xml
    中配置任何内容以获取单个 退出工作?如果是,什么?如果没有,该文件用于什么

不,你没有。但是你可以读e。G描述了服务器端SLO功能的原理和可能的自定义设置。

您是否尝试过搜索其他答案?关于这个主题,有十几个问题。谢谢@EngineerDollery(+1)-但是我能找到的唯一与单次注销(而不是登录!)相关的问题是,这是由于用户使用IP地址而不是其CAS服务器的完全限定域名造成的。我还应该提到,无论我是否在本地运行CAS(
localhost
),或者如果我将其部署到我们的开发环境(
DEV.mycas.example.com
),都会发生这种情况。请注意,CAS 3.5.2.1(最新/稳定版本)也出现了这种情况。或