带有 gwt 请求工厂的会话上下文

Posted

技术标签:

【中文标题】带有 gwt 请求工厂的会话上下文【英文标题】:Session context with gwt request factory 【发布时间】: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;

【问题讨论】:

【参考方案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 中的会话?

以上是关于带有 gwt 请求工厂的会话上下文的主要内容,如果未能解决你的问题,请参考以下文章

在与 GWT Module Base 不同的上下文中调用 GWT 服务?

无法在阿波罗服务器上下文中获取会话?

登录期间的会话处理,并在 GWT 中防止 XSRF(跨站点请求伪造)

会话上下文中的 ejb 始终为空

5G核心网信令流程 | EPS会话管理

Flask基础之上下文