gpt4 book ai didi

java - 如何在java中实现自定义http session ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:11 25 4
gpt4 key购买 nike

我需要用 Java 实现我自己的 HttpSession 版本。我发现很少的信息可以解释如何实现这样的壮举。

我想我的问题是 - 无论应用服务器的实现如何,我如何覆盖现有的 HttpSession?

我确实遇到了一本质量不错但相当旧的读物,它帮助我实现了我的目标 - http://java.sun.com/developer/technicalArticles/Servlets/ServletControl/

还有其他方法吗?

最佳答案

有两种方式。

在您自己的 HttpServletRequestWrapper 实现中“包装”原始 HttpSession

我不久前做了这个,用于使用 Hazelcast 和 Spring Session 对分布式 session 进行集群。

Here解释得很好。

首先,实现自己的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 ...
}

之后,从你自己的Filter中,把原来的HttpSession包装起来,放到你的Servlet Container提供的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 的开头设置您的过滤器,以确保它先于其他过滤器执行。

实现它的第二种方式是向您的 Servlet 容器提供您的自定义 SessionManager。

例如,在 Tomcat 7 中.

关于java - 如何在java中实现自定义http session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7135096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com