【问题标题】:How to make legacy HttpServlet Spring web aware如何让传统的 HttpServlet Spring web 感知
【发布时间】:2016-05-04 23:58:41
【问题描述】:

我们有一个遗留的HttpServlet 类,它是我们应用程序的主干。此时,该应用程序中没有任何 Spring 库。我们希望引入 Spring,特别是这样我们就可以将 Spring-Data 与 Hibernate 结合使用。

我想知道是否有办法让这个旧版 Servlet 具有 web 感知能力,以便我们可以注入 Request 和 Session 范围。特别是,我们希望能够将 HttpServletRequest 对象注入到一些 bean 中。

我们需要这样做的主要原因之一是我们有一个奇怪的多租户解决方案。 Hibernate 可以使用AbstractMultiTenantConnectionProviderCurrentTenantIdentifierResolver 的组合来处理多租户。使用 Spring-JPA 的存储库时,您将失去对会话创建的控制。解决这个问题的一种方法是实现 CurrentTenantIdentifierResolver 由于我们的租户标识符部分由请求中的某些内容决定,因此有必要将请求注入到我们的 CurrentTenantIdentifierResolver 实现中。

此外,让 Spring 参与进来,以获得它可以在旧版应用程序中提供的所有其他好处,这将是一件很棒的事情。

您知道我们如何做到这一点吗?

【问题讨论】:

  • 不,这不是...使用过滤器来确定当前租户,将其设置在本地线程中并让自定义CurrentTenantIdentifierResolver 实现使用ThreadLocal。这样您就可以在非常不同和通用的情况下使用它。这与我一年前为客户所做的相同(参见this post 并且代码在github 上免费使用),它已经具有过滤器、休眠集成、弹簧集成等。

标签: java spring hibernate spring-mvc servlets


【解决方案1】:

您可以在 web.xml 中定义 org.springframework.web.context.ContextLoaderListener,这将加载您的 Spring 应用程序上下文。

然后,在您的 servlet 代码中,您使用 WebApplicationContextUtils.getWebApplicationContext(servletContext) 辅助方法访问上下文。

在此处查看 Spring 文档: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#web-integration-common

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 2011-01-28
    • 2020-11-07
    • 2011-05-21
    • 2012-03-30
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多