我需要编写一个Servlet或Filter类,它可以访问org.apache.catalina.connector.Request对象,该对象包装在给予我的servlet的RequestFacade对象中。 Casting不起作用,因为RequestFacade不是Request的子类。如何获取Tomcat中的org.apache.catalina.connector.Request对象?
我需要这个的原因是因为我试图调用Request的setRequestedSessionId()方法,而这显然不是Http servlet规范的一部分。我需要这样做的原因是因为会话ID被包含在一个名称不同于JSESSIONID的URL中。我无法更改URL或参数的名称,所以我试图通过提取会话ID并调用Request.setRequestedSessionId()将请求与正确的会话相关联。
我已经使用Valve子类实际解决了这个问题,但我不喜欢使用Valve,因为据我所知,我需要将我的Valve子类安装在Tomcat/server/classes目录中而不是打包它与我的其他web应用程序。如果有一种可移植的方法可以跨越不同的Servlet容器来做到这一点,那就太好了,但是现在我已经放弃了制作这个Tomcat的特定版本。
这里是工作的阀门代码:
public class SessionSetter extends ValveBase {
public void invoke(Request request, Response response) throws IOException, ServletException {
String sessionId = request.getParameter("whatever");
request.setRequestedSessionId(sessionId);
}
}
是否有某种方式做同样的事情在Servlet或筛选?或者有没有办法在我的应用程序.war文件中打包Valve类?
为什么你需要一个? – Bozho 2011-02-14 21:15:16
为什么我需要做什么?我想我在第二段中说明了原因,请告诉我哪一部分我没有解释清楚。 – 2011-02-14 21:41:53