使用JBoss 5.1.0.GA进行Cas SERVICE_TICKET_NOT_CREATED和TGT错误处理时出错

时间:2013-11-09 13:57:27

标签: spring single-sign-on tomcat6 jboss5.x cas

我有两个webapp集成了A和B与Cas。当我尝试访问webapp A的受保护区域时,过滤器会将我重定向到cas login。登录后我回到了webapp A,一切运行良好。当我从webapp A导航到webapp B的保护区域时,cas过滤器再次重定向到登录表单。 我已经在tomcat 6.0.37上尝试过这个应用程序,所有工作正常,没有其他登录请求。

关于Jboss中的日志,我看到了一个截断的TGT。我第一次登录cas时写道:

09 nov 2013 11:14:40,533 DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] Added ticket [TGT-1-KYSi1x1t1MlcefajmccwatceNEqMprKj7j5ZpVDJwtJOf5OSgA-http://localhost:8000] to registry.
09 nov 2013 11:14:40,533 INFO  [com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager] Audit trail record BEGIN
=============================================================
WHO: [username: myuser]
WHAT: TGT-1-KYSi1x1t1MlcefajmccwatceNEqMprKj7j5ZpVDJwtJOf5OSgA-http://localhost:8000
ACTION: TICKET_GRANTING_TICKET_CREATED
APPLICATION: CAS
WHEN: Sat Nov 09 11:14:40 CET 2013
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
=============================================================

当我从app A转到app B时,日志是:

09 nov 2013 11:14:54,339 DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] Attempting to retrieve ticket [TGT-1-KYSi1x1t1MlcefajmccwatceNEqMprKj7j5ZpVDJwtJOf5OSgA-http]
09 nov 2013 11:14:54,340 INFO  [com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager] Audit trail record BEGIN
=============================================================
WHO: audit:unknown
WHAT: http://localhost:8000/webappB/desktop.iface
ACTION: SERVICE_TICKET_NOT_CREATED
APPLICATION: CAS
WHEN: Sat Nov 09 11:14:54 CET 2013
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
=============================================================

如您所见,cas生成TGT:

TGT-1-KYSi1x1t1MlcefajmccwatceNEqMprKj7j5ZpVDJwtJOf5OSgA-http://localhost:8000

并尝试检索:

TGT-1-KYSi1x1t1MlcefajmccwatceNEqMprKj7j5ZpVDJwtJOf5OSgA-http

我找到一种解决方法,使用$ {host.name}将bean DefaultUniqueTicketIdGenerator的value属性更改为不带字符':'和'/'的字符串。

我不会更改cas配置,因为它被许多应用程序使用并部署在不同的环境中。 为什么在Jboss中的cas不像tomcat那样工作? 我错过了一些配置吗?

1 个答案:

答案 0 :(得分:1)

host.name属性通常仅用于生成票证,并且不要求它实际上是主机名。它仅用于确保票证是唯一的,特别是在群集CAS环境中。

尝试删除host.name的协议和端口组件,因为它看起来在回程中没有正确处理冒号。

您可以在https://wiki.jasig.org/display/CASUM/Clustering+CAS的CAS手册中查看它。