如何在Java EE中实现登录?

3

我正在创建一个Java EE Web服务应用程序。 我不确定如何实现登录:

在Java EE Web服务应用程序中实现登录,将UserPrincipal存储在SessionContext中,并在每次以编程方式调用方法时检索它以使用,这种方式更好吗?

例如,假设客户A购买产品,将UserPrincipal存储在SessionContext中,然后从其中检索userid以在交易中使用,这是良好的编程实践吗?

还是说,每次进行交易时都要传递一个令牌,并将所有已登录用户和发出的令牌存储在表中,以便在完成购买时可以使用令牌来检索用户ID,这样更好?


请查看JEE API Java身份验证和授权服务,更多信息和示例请参见http://docs.oracle.com/javase/1.5.0/docs/guide/security/jaas/JAASRefGuide.html#Sample。 - alain.janinm
2个回答

4
最常见的方法是登录一次,使用数据库认证用户信息(用户名、密码),然后在会话中保存用户数据或用户角色(例如,使用会话范围的bean)。
这样,用户数据/用户角色就被持久化,并且在需要时(服务器端或客户端)可以访问。
public class UserSession implements Serializable {

    // login-related fields
    protected String  userName;
    protected String  userPassword;
    protected Object  requestInfo;


    //session related info
    private Object sessionInfo ;
    private boolean loggedIn;
    /** This method tries to login the user 
    */
    private login (userName,password){
    loggedIn = callDbAndAuthenticateUser(userName,password)
    } 

将该bean的范围定义为session,并在session上进行更新。

在另一个bean或直接从jsf页面中检查getter isLoggedIn,以知道用户是否已登录。


编辑

当您访问数据库时,可以使用ejb\rmi。这些问题不一定相同/相关,

您可以将凭据传递给远程调用的方法,或者您可以在本地服务器处理授权,并让本地身份验证机制调用远程方法。


但是我们如何每次检查用户是否已通过身份验证? - nkvp
所以我们应该在 Web 部分使用 Java Beans...那么在 EJB 部分的身份验证呢? - nkvp

2
据我所知,最佳实践是将USER_ID存储在数据库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接