0

How do I get the HttpServletRequest in Spring MVC?

When trying to get the HttpServletRequest, I get an exception.

Message 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.

Please tell me how to solve the problem?

    @Component
    public class AuthenticationSuccessEventListener implements ApplicationListener<AuthenticationSuccessEvent> {


        @Autowired
        private HttpServletRequest request;


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

    }
zvzvzxvzxv
  • 117
  • 2
  • 12

2 Answers2

1

Can you try this

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

also u need to add/register a RequestContextListener listener in web.xml file.

<web-app ...>
   <listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
   </listener>
</web-app>
Swadeshi
  • 1,596
  • 21
  • 33
0

You shouldn't autowire a HttpServletRequest in your aspect as this will tie your aspect to be only runnable for classes that are called from within an executing HttpServletRequest.

Instead use the RequestContextHolder to get the request when you need one.

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

Danial
  • 1
  • 1