基于Glassfish表单的安全性获取用户信息

时间:2013-07-21 10:43:56

标签: forms security glassfish-3

我在我的Java EE应用程序中使用基于表单的身份验证配置了GlassFish JDBC领域,所以一切正常。

但我想获取用户的信息(user_id),我想在会话期间将其保留在列表中。在他的会话超时或发生注销后,我将从此列表中删除它。

我应该更改身份验证方法吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,Java EE安全API不够丰富,无法提供有关登录用户的详细信息。

您唯一可以要求的是用户用于登录的名称。您可以通过HttpServletRequest#getUserPrincipal#getName或其他HttpServletRequest#getRemoteUser来完成此操作。

有一些解决方法:

  1. 在Servlet过滤器中,检查您所说的“列表”是否为空,并且上述任一方法都返回非null 值。如果此条件成立,请根据用户名手动查询用户详细信息并将其放入此“列表”中。 (我不确定为什么你专门使用这个列表,但除此之外)

  2. 确实将auth方法更改为程序化变体。这意味着您可以构建自己的表单,对话框或其他内容。然后在您的支持代码中(如果使用JSF支持bean,则使用Servlet或其他)加载用户详细信息,并使用这些详细信息中的用户名调用HttpServletRequest#login。如果此呼叫成功立即将您的扩展用户信息再次放入“列表”中。

  3. (高级方法)使用自定义身份验证模块(例如,通过JASPIC),让此auth模块委托给您的应用程序中的代码。然后,此基于应用程序的代码将用户名和角色返回给容器,同时将用户详细信息放入HTTP会话中。这种方法的优点是你可以在一个地方拥有用户登录/加载代码,而且它也只做了一次。使用JDBC领域,代码(查询)在两个地方,并且也进行了两次。

  4. 我建议先尝试选项1或2。如果您想要使用高级方法,请查看http://jdevelopment.nl/open-source/java-ee-kickoff-app以获取示例。

    如果您不熟悉Java EE没有更简单,更强大的机制来开箱即用,请考虑投票支持此问题:https://java.net/jira/browse/JAVAEE_SPEC-9