Два способа.
"Обертывание" оригинала HttpSession
в вашей собственной реализации HttpServletRequestWrapper
.
Я сделал это недавно для кластеризациираспределенные сеансы с Hazelcast и Spring Session.
Здесь объясняется довольно хорошо.
Во-первых, реализуйте свои собственные HttpServletRequestWrapper
public class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper {
public SessionRepositoryRequestWrapper(HttpServletRequest original) {
super(original);
}
public HttpSession getSession() {
return getSession(true);
}
public HttpSession getSession(boolean createNew) {
// create an HttpSession implementation from Spring Session
}
// ... other methods delegate to the original HttpServletRequest ...
}
Послеиз вашего собственного фильтра оберните исходный HttpSession
и поместите его в FilterChain
, предоставленный вашим контейнером сервлетов.
public class SessionRepositoryFilter implements Filter {
public doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
SessionRepositoryRequestWrapper customRequest =
new SessionRepositoryRequestWrapper(httpRequest);
chain.doFilter(customRequest, response, chain);
}
// ...
}
Наконец, установите свой фильтр в начале в файле web.xml какубедитесь, что он работает раньше любого другого.
Второй способ достижения этого - предоставление вашему сервлет-контейнеру пользовательского SessionManager.
Например, в Tomcat 7.