我有一个GAE CloudEndpoints项目,但在使用Java会话维护会话状态时遇到了麻烦。到目前为止,这是我所做的:

首先,我在appengine-web.xml文件中启用了Sessions。

然后,我创建了一个“登录对象”来保存用户电子邮件和密码。我也将其设置为可序列化(在我读到这是一项要求吗?)

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Session implements Serializable{

private static final long serialVersionUID = 4013168535563327001L;
@Persistent
String email;
@Persistent
String password;

 public String getemail() {
         return email;
 }

 public void setemail(String email) {
     this.email = email;
 }

 public String getpassword() {
     return password;
 }

 public void setpassword(String password) {
     this.password = password;
 }
}


然后,我创建了一个控制器来创建会话并将登录对象作为属性存储在其中:

@ApiMethod(name="setLoginTest")
public Object setloginTest(HttpServletRequest request, User myLogin){

    //Just setting some values into myLogin
    //for production, this will compare submitted values against a DB.
    myLogin.email = "Jason";
    myLogin.password = "123";

    //Creating the session object
    HttpSession mySession = request.getSession(true);

    //Trying to set an attribute that holds the login object
    //(i.e. i want to store the username in the session)
    mySession.setAttribute("loginObj", myLogin);

    return myLogin;
}


如果我调用此端点,则系统将返回myLogin对象,没有问题,并且我知道mylogin对象具有用户名“ jason”和pw“ 123”

因此,这是我创建端点的最后一步,该端点将检查会话是否具有某些用户数据或为空。理想情况下,如果已登录,我将采取一些措施,如果未登录,则返回“未登录”消息。

@ApiMethod(name="getSessionTest")
public Object getSessionTest(HttpServletRequest request, User myLogin){

    //getting the current session info
    HttpSession mySession = request.getSession(false);

    //Always returns NULL which is not right!!
    return mySession.getAttribute("loginObj");
}


但是,麻烦的是“ Getsessiontest”端点始终返回null。请帮忙!

最佳答案

如果您正在运行Cloud Endpoints,为什么还要在服务器端需要会话?您可以在客户端存储“会话”信息。如果要从Javascript客户端使用端点,则可以使用localstorage充当会话cookie。

关于java - GAE CloudEndpoints Java session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29085724/

10-10 05:54