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

Forms 基于Glassfish表单的安全性获取用户信息,forms,security,glassfish-3,Forms,Security,Glassfish 3,我在JavaEE应用程序中使用基于表单的身份验证配置了GlassFish JDBC领域,因此一切正常 但是我想获取用户的信息(用户id),并在他的会话期间将其保存在列表中。在他的会话超时或发生注销后,我会将其从列表中删除 我应该更改auth方法吗 不幸的是,JavaEE安全API不够丰富,无法提供有关登录用户的详细信息 您唯一可以要求的是用户用于登录的名称。您可以通过或它的替代方案来实现这一点 有几个变通办法: 在Servlet过滤器中,检查您提到的这个“列表”是否为空,并且上面的任何一个方法都

我在JavaEE应用程序中使用基于表单的身份验证配置了GlassFish JDBC领域,因此一切正常

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


我应该更改auth方法吗

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

您唯一可以要求的是用户用于登录的名称。您可以通过或它的替代方案来实现这一点

有几个变通办法:

  • 在Servlet过滤器中,检查您提到的这个“列表”是否为空,并且上面的任何一个方法都返回一个非null值。如果此条件成立,请根据用户名手动查询用户详细信息并将其放入此“列表”。(我不太清楚你为什么专门为此使用一个列表,但把它放在一边)

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

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

  • 我建议先试试选项1或2。如果您想采用高级方法,请查看示例


    <>如果java EE没有一个更简单、更强大的机制来完成这个问题,请考虑投票表决:

    谢谢你的回答。我将我的安全方法更改为使用ApacheShiro编程。我认为,Shiro很好,比大多数其他实现更易于使用。