Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringMVC中获取HttpServletRequest?_Java_Spring_Spring Mvc_Spring Security - Fatal编程技术网

Java 如何在SpringMVC中获取HttpServletRequest?

Java 如何在SpringMVC中获取HttpServletRequest?,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,如何在SpringMVC中获取HttpServletRequest 当尝试获取HttpServletRequest时,我得到一个异常 消息未找到线程绑定请求:您是指实际web请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,但仍然收到此消息,则您的代码可能在DispatcherServlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。 请告诉我如何解决这个问题 @Com

如何在SpringMVC中获取HttpServletRequest

当尝试获取HttpServletRequest时,我得到一个异常

消息
未找到线程绑定请求:您是指实际web请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,但仍然收到此消息,则您的代码可能在DispatcherServlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。

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

    @Component
    public class AuthenticationSuccessEventListener implements ApplicationListener<AuthenticationSuccessEvent> {


        @Autowired
        private HttpServletRequest request;


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

    }
@组件
公共类身份验证SuccessEventListener实现ApplicationListener{
@自动连线
私有HttpServletRequest;
@凌驾
ApplicationEvent(AuthenticationSuccessEvent a)上的公共无效{
System.out.println(request.getRemoteAddr());
}
}
您不应该像这样在您的方面中自动连接HttpServletRequest 将使您的方面仅对调用 从正在执行的HttpServletRequest中

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

你能试试这个吗

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>

org.springframework.web.context.request.RequestContextListener

这不起作用。这不起作用。
<web-app ...>
   <listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
   </listener>
</web-app>