Java 如何在没有请求的情况下获得spring中的会话?

Java 如何在没有请求的情况下获得spring中的会话?,java,spring,spring-mvc,session,Java,Spring,Spring Mvc,Session,在SpringMVC中是否有获取当前会话的方法,但不是通过请求。通常我们所做的是在Action/Controller类方法中获取请求。从这个请求中,我们逐个请求获取会话。getSession()。但是有没有办法在没有这个请求对象的情况下获得这个会话 我的动机是,在一个实用程序类中,我需要访问会话中设置的值,而这个实用程序类方法是从控制器类的50多个方法中访问的。如果我必须根据请求获得会话,那么我需要更改所有这50个位置。这看起来很乏味。请建议一种替代方法。我们可以在不传递HttpServletR

在SpringMVC中是否有获取当前会话的方法,但不是通过请求。通常我们所做的是在Action/Controller类方法中获取请求。从这个请求中,我们逐个请求获取会话。getSession()。但是有没有办法在没有这个请求对象的情况下获得这个会话


我的动机是,在一个实用程序类中,我需要访问会话中设置的值,而这个实用程序类方法是从控制器类的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;
}