在服务层访问HttpServletrequest,这是最佳实践吗?

时间:2017-05-15 15:59:32

标签: java rest spring-boot http-headers

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

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

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

我确信有更好,更清晰的方法来实现这一点,但在搜索后我没有更好的方法将这些信息提供给服务层。

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

1 个答案:

答案 0 :(得分:0)

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

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

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