Java 如何在Tomcat中保存主体信息(即setPrincipal?)

Java 如何在Tomcat中保存主体信息(即setPrincipal?),java,tomcat,servlets,principal,Java,Tomcat,Servlets,Principal,我正试图在tomcat领域特性的旁边构建第二种用户登录方式。这意味着未经身份验证的用户可以: 1.通过调用域登录 2.提供有效令牌并自动登录 我正在努力实现2。因此,我使用过滤器将请求重定向到包装器中。在该包装器中,我覆盖getUserPrincipal,以便为该用户创建主体。然后容器将识别主体并允许用户进入,而无需重定向到登录页面 然而现在的问题是:似乎不是所有的请求都能得到正确的主体。关于servlet的请求,如果servlet使用调度程序转发请求,将获得主体集。使用sendRedirect

我正试图在tomcat领域特性的旁边构建第二种用户登录方式。这意味着未经身份验证的用户可以: 1.通过调用域登录
2.提供有效令牌并自动登录

我正在努力实现2。因此,我使用过滤器将请求重定向到包装器中。在该包装器中,我覆盖
getUserPrincipal
,以便为该用户创建主体。然后容器将识别主体并允许用户进入,而无需重定向到登录页面

然而现在的问题是:似乎不是所有的请求都能得到正确的主体。关于servlet的请求,如果servlet使用
调度程序
转发请求,将获得主体集。使用
sendRedirect
的简单链接或servlet不会调用
getUserPrincipal
方法,因此即使用户使用方法2登录,登录页面也会出现


这就像为该用户创建的主体是“临时的”。我想知道是否有办法将主体存储在会话中或某个地方,以便容器知道用户已通过身份验证。

我确实做到了这一点,但我使用Tomcat JAAS领域并提供了两个LoginModule,一个用于票据,另一个用于用户名/密码。需要一些集成来防止在票证登录时获得登录页面。实际上,在我的系统中有第三个登录方法,通过有效的客户端证书,还有第四个登录模块,用于查找和分配用户的角色,但是他是通过前三个模块之一建立的


我参与了一个名为AuthenticRoast的Google代码项目,在这方面有所帮助。与Tomcat 6和7集成,还有Glassfish,虽然我还没有尝试过。

@Andy:为什么你不为Java EE领域创建一个新的标记?我认为这更适合于在该领域提问的人,我会脚踏实地:-)我正在清理一堆无效的标记-公司名称作为一个普通名词的风险!我对Tomcat或Java EE了解不多,所以不知道该领域的人应该使用什么样的标签名——如果你想发明一个标签,很高兴使用我的高评级再次编辑并添加合适的标签!它应该是tomcat领域还是ee领域?