【问题标题】:Access HttpServletrequest at service layer, which is the best practice?在服务层访问 HttpServletrequest,哪个是最佳实践?
【发布时间】:2023-03-29 22:30:01
【问题描述】:

我需要从Spring Boot RESTful API 的服务层访问存储在HttpServletRequest 的请求标头。这样做的原因是我需要访问 x-forwarded-for 标头来获取任何接收到的请求的原始 IP 地址。

首先,我认为实现这一目标的最简单方法是在需要此信息的服务处@Autowire HttpServeletRequest,但深入思考这一点,我发现这不是一个好习惯,因为我混合层。

另一种选择是通过参数将我需要的信息从标头传递给需要此信息的服务方法。

我确信有更好更简洁的方法来实现这一点,但经过搜索后,我没有更好的方法将此信息传递给服务层。

有谁知道将一些请求标头传递给服务层或这些标头包含的信息的最佳做法是什么?

【问题讨论】:

  • 恕我直言,最好的解决方案是将我需要的信息从标头通过参数传递给需要此信息的服务方法
  • 只需将参数的HttpServletRrquest对象放在你的方法中。
  • 为什么不能只将 IP 地址作为字符串参数发送到服务层的方法!正常的
  • 保持图层分开。提取RESTful方法中的IP地址,作为参数传递给Service方法。

标签: java rest spring-boot http-headers


【解决方案1】:

首先由于自动装配的对象在你终止应用程序之前一直存在,你不应该自动装配它们 > declaring-httpsession-object-in-controller

另一方面,即使您可能不应该将 httpServletRequest 对象传递给服务层。使用服务层的原因已经是“分层”。您可以使用其他东西作为控制器,那时 servletRequest 对象将毫无用处。不应该在服务层的范围内。

最后,如果您的请求中需要一些东西,即为服务层提供普通数据,您可以创建一个参数对象并将其传递给服务层。

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多