这是我的问题:我正在编写一个平台,我将提供给客户来实施他们的项目。所以在我的平台上,我创建了一个SessionService
方法,其中我有类似getCurrentSession
, getAttribute
,setAttribute
等的方法。在 spring-session 之前我getCurrentMethod
看起来像这样:
@Override
public HttpSession getCurrentSession() {
if (this.session == null) {
final ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest().getSession(true); // true == allow create
}
return this.session;
}
它工作得非常好,虽然它看起来很丑而且没有像 redis 这样的支持。现在我想迁移到spring-session
并且我希望使用SessionRepository
来查找用户的当前会话,但是我只能getSession(String id)
在那里看到一个。我相信 id 存储在 cookie 中,所以要使用它,我可能必须将HttpServletRequest
对象从我的控制器传递到我的门面,再到非常靠近 db 层的服务层。这对我来说似乎是一个非常糟糕的主意,所以我的问题是:有没有办法让 currentSession 靠近 db 层?我认为的一种方法是编写一个拦截器,该拦截器将被调用控制器,它将在存储库中设置当前会话,或者可能是服务?我只是不确定这是正确的方法。