使用AutoWired HttpSession的问题:
LoginController调用LoginService传递HttpServletRequest作为参数。
我已经在其他一些带注释的类中自动装配了HttpSession(但不是在LoginService中):
@Autowired
private HttpSession httpSession;
在LoginService类中,如果我尝试通过调用request.getSession(false)
获取会话,则在某些情况下我会收到null。
如果我尝试通过调用request.getSession(true)
来获取会话,那么我最终会得到两个HttpSession对象(一个在这里,另一个通过AutoWiring)。
如果我在LoginServic类中自动装配HttpSession并使用那里的会话,那么我也将以两个HttpSession对象结束。
何时会创建完全自动装配的HttpSession?处理这种情况的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
LoginController应该管理Web关注
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);
}
}