如何在Java EE中实现登录?

时间:2012-02-04 18:41:58

标签: web-services authentication java-ee login forms-authentication

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

通过将UserPrincipal存储在SessionContext中并在每次以编程方式调用方法来检索它时,可以更好地在JAVA EE Web服务应用程序中实现登录

例如说客户A购买产品,将UserPrincipal存储在SessionContext中并从中检索用户ID以在事务中使用是一种很好的编程习惯,

,或者

最好每次为每个事务传递一个令牌,并存储所有登录的用户和在表中发出的令牌,以便在购买完成后,令牌可用于检索用户ID吗?

2 个答案:

答案 0 :(得分:4)

最常见的方法是登录一次,使用db验证用户信息(uname,密码), 然后保存会话用户数据或用户角色(例如,使用会话范围的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,并在会话中更新它

在另一个bean中或直接从jsf页面检查getter isLoggedIn以了解用户是否已记录。


修改

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

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

答案 1 :(得分:2)

AFAIK,最佳做法是将USER_ID存储在数据库中。