Spring MVC何时会自动生成HttpSession?

使用AutoWired HttpSession的问题:

LoginController调用LoginService传递HttpServletRequest作为参数。

我已经在其他几个带注释的类中自动assembly了HttpSession(但不是在LoginService中):

@Autowired private HttpSession httpSession; 

在LoginService类中,如果我尝试通过调用request.getSession(false)来获取会话,则在某些情况下我会收到null。

如果我尝试通过调用request.getSession(true)来获取会话,我最终会得到两个HttpSession对象(一个在这里,另一个通过AutoWiring)。

如果我在LoginServic类中自动assemblyHttpSession并从那里使用会话,那么我也将以两个HttpSession对象结束。

何时会创建完全自动assembly的HttpSession? 处理这种情况的最佳方法是什么?

谢谢!

LoginController应该管理Web Concern。
LoginService应该管理身份validation问题而不应该知道Web关注。
HttpSession是Web域的关注点。 因此,必须在管理Web关注的类中管理 – > LoginController。
因此,LoginController将声明为HttpSession的Mapped方法的参数,并将从HttpSession读取/写入所需内容,并将其作为LoginService上调用的方法的参数传递。
就像是 :

 @Controller public class ApplicationController { @Autowired private LoginService loginService; @RequestMapping(value = "/login", method = POST) public void Login(HttpSession httpSession) { final String myAttribute = String.valueOf(httpSession.getAttribute("myAttribute")); loginService.doWhatYouNeedToDo(myAttribute); } }