0

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

我正在尝试实现 2。所以我使用过滤器将请求重定向到包装器中。在该包装器中,我覆盖了,getUserPrincipal以便可以创建该用户的主体。然后容器将识别主体并让用户进入而不重定向到登录页面。

但是现在的问题是:似乎并非所有请求都会获得正确的主体。关于 servlet 的请求以及 servlet 是否Dispatcher用于转发请求将获得主体集。使用简单链接或 servletsendRedirect不会调用该getUserPrincipal方法,因此即使用户使用方法 2 登录也会出现登录页面。

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

4

1 回答 1

0

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

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

于 2012-09-17T03:06:01.313 回答