Два пути.
"Обертывание" исходного 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.
person
Dani
schedule
28.01.2016