我正在尝试为tomcat领域功能和用户登录构建第二种方式。这意味着未经身份验证的用户可以:
1.通过唤起境界签约
2.提供有效令牌并自动登录
我正在尝试实现2.所以我使用过滤器将请求重定向到包装器。在该包装器中,我覆盖getUserPrincipal
,以便可以创建该用户的主体。然后容器将识别主体并让用户输入而不重定向到登录页面。
但现在问题是:似乎并非所有请求都会获得正确的主体。有关servlet的请求以及servlet使用Dispatcher
转发请求的请求将获得主体设置。使用sendRedirect
的简单链接或servlet不会唤起getUserPrincipal
方法,因此即使用户使用方法2登录,也会显示登录页面。
这就像为该用户创建的主体是“临时”的。我想知道是否有办法将主体存储在会话中或某个地方,以便容器知道用户已经过身份验证。
答案 0 :(得分:0)
我已经做到了这一点,但我是通过使用Tomcat JAAS Realm并提供两个LoginModule,一个用于票证,一个用于用户名/密码。需要进行一些集成以防止在票证登录时获取登录页面。实际上在我的系统中有第三种登录方法,有效的客户端证书,还有第四个登录模块,用于查找和分配用户的角色,但是他是由前三个模块之一建立的。
有一个名为AuthenticRoast的Google Code项目,我在这方面做出了贡献。与Tomcat 6和7以及Glassfish集成,尽管我还没有尝试过。