gpt4 book ai didi

java - Google AppEngine session 示例

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:17 24 4
gpt4 key购买 nike

我只是enabled Session在我的 Google AppEngine/Java + GWT 应用程序中。我该如何使用它?我如何获得 session ID 并从中播放所有好东西?是否有任何简单登录页面的真实示例,我只需输入登录名和密码,然后通过 RPC 调用转到服务器,对数据库进行身份验证并将 session ID 发送回客户端。

我已经有了以下代码,但不知道下一步该做什么:

GWT 登录表单:

public class LoginForm {
private final LoginServiceAsync loginService = GWT.create(LoginService.class);

VerticalPanel loginVp = new VerticalPanel();
TextBox loginTxt = new TextBox();
TextBox passTxt = new TextBox();

Button loginBtn = new Button("Login");

public Widget getLoginWidget(){

loginBtn.addClickHandler(new ClickHandler(){

public void onClick(ClickEvent arg0) {

loginService.authenticateUser(loginTxt.getText(), passTxt.getText(),
new AsyncCallback<String>(){

public void onFailure(Throwable caught) {
InfoPanel.show(InfoPanelType.HUMANIZED_MESSAGE, "No Connetion", "Problem conneting to the server.");
}

public void onSuccess(String result) {
InfoPanel.show(InfoPanelType.HUMANIZED_MESSAGE, "Session ID", "Your session id is: " + result);

GWT.log("Setting up session", null);
String sessionID = result;
final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login. 2 weeks
Date expires = new Date(System.currentTimeMillis() + DURATION);
Cookies.setCookie("sid", sessionID, expires, null, "/", false);
}
}
);
}
});

loginVp.add(loginTxt);
loginVp.add(passTxt);
loginVp.add(loginBtn);

return loginVp;
}
}

RPC 服务小程序:

public class LoginServiceImpl extends RemoteServiceServlet implements LoginService{ 
//Sends back to the client session id
public String authenticateUser(String login, String password){
String sessionId = new String();

// TODO: figure out how to work with session id in GAE/J
sessionId = "How to get session id?";

return sessionId;
}

public Boolean checkIfSessionIsValid(String sessionId){

//TODO: figure out how to check user's credentials
return true;
}
}

任何正确方向的提示都会有所帮助。谢谢。

最佳答案

启用 session 支持可为您提供标准的 Servlet HttpSession。

这将通过 cookie(称为 JSESSONID)进行跟踪,该 cookie 由 servlet 容器在幕后管理。您无需关心 session ID。

然后您可以设置将与 session 关联的属性(服务器端)(以便您稍后可以检索它们)。

HttpServletRequest request = this.getThreadLocalRequest();

HttpSession session = request.getSession();

// in your authentication method
if(isCorrectPassword)
session.setAttribute("authenticatedUserName", "name");

// later
if (session.getAttribute("authenticatedUserName") != null)

这也适用于来自 GWT 的 Ajax 请求。有关详细信息,请参阅任何 Servlet 教程。

GAE 上的 session (与其他 servlet 引擎相比)的缺点是它们每次都在数据库中序列化并从数据库中加载,这可能很昂贵,尤其是当您在其中放置大量数据时。

关于java - Google AppEngine session 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1134800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com