使用自动接线的HttpSession的问题:

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

我已经在其他一些带注释的类中自动连接了HttpSession,但是在LoginService中却没有:

@Autowired
private HttpSession httpSession;


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

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

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

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

谢谢!

最佳答案

LoginController应该用于管理Web Concern。
LoginService应该管理身份验证问题,而不应该了解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);
}
}

关于java - Spring MVC何时会 Autowiring HttpSession?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41151804/

10-10 02:47