Java 如何在没有请求的情况下获得spring中的会话?
在SpringMVC中是否有获取当前会话的方法,但不是通过请求。通常我们所做的是在Action/Controller类方法中获取请求。从这个请求中,我们逐个请求获取会话。getSession()。但是有没有办法在没有这个请求对象的情况下获得这个会话Java 如何在没有请求的情况下获得spring中的会话?,java,spring,spring-mvc,session,Java,Spring,Spring Mvc,Session,在SpringMVC中是否有获取当前会话的方法,但不是通过请求。通常我们所做的是在Action/Controller类方法中获取请求。从这个请求中,我们逐个请求获取会话。getSession()。但是有没有办法在没有这个请求对象的情况下获得这个会话 我的动机是,在一个实用程序类中,我需要访问会话中设置的值,而这个实用程序类方法是从控制器类的50多个方法中访问的。如果我必须根据请求获得会话,那么我需要更改所有这50个位置。这看起来很乏味。请建议一种替代方法。我们可以在不传递HttpServletR
我的动机是,在一个实用程序类中,我需要访问会话中设置的值,而这个实用程序类方法是从控制器类的50多个方法中访问的。如果我必须根据请求获得会话,那么我需要更改所有这50个位置。这看起来很乏味。请建议一种替代方法。我们可以在不传递HttpServletRequest的情况下从控制器空间中检索HttpSession Spring提供了将请求公开给当前线程的侦听器。你可以参考 此侦听器应在web.xml中注册
<listener>
<description>Servlet listener that exposes the request to the current thread</description>
<display-name>RequestContextListener</display-name>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
阅读@SessionAttributes,并在网上找到一些示例。你不能覆盖或
变形你的实用方法吗?请澄清你的具体问题或添加其他详细信息,以突出你所需要的。正如目前所写的,很难准确地说出你在问什么。请参阅“如何寻求帮助”页面以澄清此问题。我认为我的问题非常清楚。在SpringMVC中是否有获取当前会话的方法,但不是通过请求。这说明了一切。我希望会话对象来自于请求对象之外的其他源。我得到了问题的答案。请参阅接受的答案。我在web.xml中添加了RequestContextListener,在第一个请求中,我使用RequestContextHolder在会话中设置了属性,在下一次调用中,会话中没有属性。有什么建议吗
public final User getUser() {
RequestAttributes requestAttributes = RequestContextHolder
.currentRequestAttributes();
ServletRequestAttributes attributes = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = attributes.getRequest();
HttpSession httpSession = request.getSession(true);
Object userObject = httpSession.getAttribute("WEB_USER");
if (userObject == null) {
return null;
}
User user = (User) userObject;
return user;
}