【问题标题】:Session context with gwt request factory带有 gwt 请求工厂的会话上下文
【发布时间】:2013-06-02 19:20:09
【问题描述】:

我在 GWT RPC Servlet 中有一个登录方法,它从会话上下文中获取用户,因此确定用户是否登录。我想将此方法移植到请求工厂方法(以获取代理实体而不是 DTO)。

但是我可以把它放在哪里呢?我不能将它放在实体中,因为我没有会话上下文。这里的正确方法是什么?

我的 RPC 方法目前如下所示:

@Override
public UserDTO isLoggedIn() {
    // TODO Auto-generated method stub

    HttpSession session = getThreadLocalRequest().getSession();

    String userName = (String)session.getAttribute("userName");

    if(userName !=null){
        return new UserDTO(userName);
    }
    return null;
}

【问题讨论】:

    标签: java session gwt rpc requestfactory


    【解决方案1】:

    RequestFactory 还提供了访问请求和 servlet 上下文的方法

    HttpSession session = com.google.web.bindery.requestfactory.server.RequestFactoryServlet.getThreadLocalRequest().getSession();
    

    文档可以在这里找到:

    http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/web/bindery/requestfactory/server/RequestFactoryServlet.html#getThreadLocalRequest()

    【讨论】:

    • 是的,但我没有直接从客户端访问该 servlet。我只是与代理实体交互,他们不知道 servlet。
    • 没错,@jan - 这是服务器代码。在 RPC 中,您编写一个 servlet,但在客户端和服务器上重用相同的 DTO,但在 RF 中,您在服务器上有实体,在客户端有代理。在服务器上(唯一可用的地方会话),您可以调用上面列出的方法。没有客户端可以理解的会话数据,因为所有会话都存在于服务器上。
    • 我知道这一点,但我不确定如何在请求工厂工作流程中集成方法
    • 这里RFRPC没有区别。与在 RPC 调用中传回 UserDTO 对象的方式相同,您可以在 RF 服务方法中执行此操作。您可以使用ServiceLocator 模式来实现它。
    • 我不明白 - 那我如何访问 ServiceLocator 中的会话?
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多