Java 拦截对Tomcat 6中HttpSession的调用

Java 拦截对Tomcat 6中HttpSession的调用,java,spring-mvc,aop,tomcat6,Java,Spring Mvc,Aop,Tomcat6,拦截session.getAttribute()和session.setAttribute()的推荐方法是什么?这是一个基于Spring的应用程序,所以基于AOP的东西会很好。如果可能的话,我希望避免重写核心Tomcat类 更新:我想在web服务中存储实际的序列化属性。我不熟悉AOP或Spring(或Tomcat)。:)但是我熟悉Java 我这样做的方式是设置一个过滤器,并用我自己的对象替换请求变量 request = new MyRequest(request); 然后重写getSessio

拦截session.getAttribute()和session.setAttribute()的推荐方法是什么?这是一个基于Spring的应用程序,所以基于AOP的东西会很好。如果可能的话,我希望避免重写核心Tomcat类


更新:我想在web服务中存储实际的序列化属性。

我不熟悉AOP或Spring(或Tomcat)。:)但是我熟悉Java

我这样做的方式是设置一个过滤器,并用我自己的对象替换请求变量

request = new MyRequest(request);
然后重写getSession()和getSession(布尔值)以返回MySession的实例


javax.servlet.HttpServletRequest和javax.servlet.HttpSession类是Java EE标准类,而不是特定于Tomcat的类。

您可以实现自己的会话,尽管接口看起来相当长,但可能先看看扩展ManagerBase或StandardManager


另一种方法是,在添加/删除/更新会话属性时,注册一个要通知的会话。这不会改变默认的存储机制-会话数据也将保留在内存中-但它也可以让您使用另一种机制来持久化数据。

您提到的第一种方法是我首先做的,不幸的是,在此实例中,我可能无法修改核心Tomcat配置。AttributeListener方法看起来很有趣,也没有太大的侵入性,我一定会尝试一下。@Abdullah,您应该能够通过编辑conf/server.xml来配置不同的管理器。但是类文件(或jar)不需要在TOMCAT_HOME/lib中吗?我认为我没有访问该文件夹的权限,有办法吗?我认为您是正确的,您配置Tomcat使用的任何新管理器都必须在服务器级类路径上可用。我假设,如果您希望能够更改会话级数据的存储位置,那么您可以重新配置这样的内容。如果不是,那么侦听器可能是你最好的方法。更正-你可以在服务器级别或上下文(读:应用程序)级别配置有关使用哪个管理器的详细信息:这是我第一个得到评分的答案。我看着它与马特的回答并驾齐驱:)