我有一个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/