Java 如何在SpringMVC中获取HttpServletRequest?
如何在SpringMVC中获取HttpServletRequest 当尝试获取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
未找到线程绑定请求:您是指实际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>