【问题标题】:How do I get the HttpServletRequest in Spring MVC?如何在 Spring MVC 中获取 HttpServletRequest?
【发布时间】:2021-08-17 19:01:43
【问题描述】:

如何在 Spring MVC 中获取 HttpServletRequest?

在尝试获取 HttpServletRequest 时,我得到了一个异常。

留言 No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

请告诉我如何解决这个问题?

    @Component
    public class AuthenticationSuccessEventListener implements ApplicationListener<AuthenticationSuccessEvent> {


        @Autowired
        private HttpServletRequest request;


        @Override
        public void onApplicationEvent(AuthenticationSuccessEvent a) {
            
            System.out.println(request.getRemoteAddr());
            
        }

    }

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    您不应该在您的方面自动装配 HttpServletRequest,因为这样 将您的方面绑定为仅可用于被调用的类 从正在执行的 HttpServletRequest 中。

    而是在需要时使用 RequestContextHolder 来获取请求 一个。

    private String getRemoteAddress() {
        RequestAttributes attribs = RequestContextHolder.getRequestAttributes();
        if (attribs instanceof NativeWebRequest) {
            HttpServletRequest request = (HttpServletRequest) ((NativeWebRequest) attribs).getNativeRequest();
            return request.getRemoteAddr();
        }
        return null;
    }
    

    https://stackoverflow.com/a/24029989/11985558

    【讨论】:

      【解决方案2】:

      你可以试试这个

      RequestAttributes reqAtt = RequestContextHolder.getRequestAttributes();
      if (RequestContextHolder.getRequestAttributes() != null) {
          HttpServletRequest req = ((ServletRequestAttributes) reqAtt).getRequest();
          return req.getRemoteAddr();
      }
      

      你还需要在 web.xml 文件中添加/注册一个 RequestContextListener 监听器。

      <web-app ...>
         <listener>
          <listener-class>
              org.springframework.web.context.request.RequestContextListener
          </listener-class>
         </listener>
      </web-app>
      

      【讨论】:

        猜你喜欢
        • 2013-09-12
        • 2010-10-08
        • 2017-09-16
        • 2015-07-13
        • 2018-10-19
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多