同一应用程序中的 Spring 和 Jersey State 完整和无状态方法

Posted

技术标签:

【中文标题】同一应用程序中的 Spring 和 Jersey State 完整和无状态方法【英文标题】:Spring and Jersey State full and Stateless approach in same application 【发布时间】:2016-07-15 08:18:21 【问题描述】:

在我的 Spring 应用程序中,我同时使用:控制器和服务层。我正在使用控制器重定向我的 JSP。在服务层中,我使用 jax-RS 编写服务。我使用基于令牌的方法通过 Spring 安全性保护了我的 Web 服务。我正在尝试实施

1.移动设备中的相同 API(无状态)

2.Web 应用程序 与我已经在应用程序中定义的相同的 API 和控制器

3.Web:记住我。基于令牌。 什么是标准做法?

我可以在单个应用程序中使用 REST 服务实现它吗?或者我需要将控制器和 JSP 从应用程序中分离出来。即两个单独的应用程序

1.Spring MVC web Application:控制器和JSP。使用 REST 服务。

    Jersey 应用程序:只有服务。没有控制器,没有 JSP

    android 移动应用程序:使用 REST 服务。

【问题讨论】:

【参考方案1】:

可以在同一个应用程序中实现 JSON-API 和 Web 应用程序。为此,您不需要使用 Jersey 和 Spring MVC。一个框架就足够了。

本文解释了如何使用 Spring 实现 JSON-API(或者更确切地说是 REST API):Building a RESTful Web Service

在这部分 Jersey 文档中解释了如何使用 Jersey 来创建带有 JSP 或其他模板语言的 html:Chapter 20. MVC Templates

两个框架的集成也是可能的:How to integrate Jersey in a Spring MVC application

所以这取决于您使用哪种方法。

也许另一种可能性可以满足您的要求:您可以在一个单独的库中实现业务逻辑和持久性,并在两个项目中使用它。这个库可以使用 Spring Dependency Injection、Spring Persistence 等。这是 Jersey 文档中的部分,它可以帮助您将此库集成到 Jersey:Spring DI 如果您选择这种方法,我建议您创建一个Maven multi-module project,其中包含 3 个部分(业务、Web、api)作为单独的模块。

对于您问题的第二部分,如何实现基于令牌的“记住我”(更准确地说是session)。在 Web 应用程序中,通常为此使用 Cookie。如何在 Jersey 中实现这一点,可以找到 here,其中使用了 HttpSession 类。 如果您希望 JSON-API 更加 RESTful(无状态),则必须在每个请求中发送凭据(可能是散列密码)。有关更多选项,我推荐这篇文章:RESTful Authentication 并查看这部分球衣文档:Security 或这篇文章Spring Security and Angular JS。

【讨论】:

是的,我明白了。但是在同一个应用程序中是多么无状态和状态完整。以防记住我。我不希望会话采用无状态方法。如果没有选中记住我,我想要会话,如果用户是理想的 20 分钟,会话将过期 这取决于您的首选方法。你的选择是什么?

以上是关于同一应用程序中的 Spring 和 Jersey State 完整和无状态方法的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器

无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器

Jersey+Spring+Maven(转)

Spring-Boot Jersey:允许 Jersey 提供静态内容

带有 Jersey 和 Spring Security OAuth2 的 Spring Boot

Spring Boot Jersey 和监控 URL