【问题标题】:How do I avoid creating a session?如何避免创建会话?
【发布时间】:2012-04-29 05:18:06
【问题描述】:

我的设置如下

  • 在 /myApp/mainServlet/ 下可访问的主应用程序 servlet
  • 一个小小的“手工”soap 代理,它为来自客户端的soap 调用添加安全标头(用户名、密码)
  • 与主 servlet 对话(通过 BlazeDS 接口)的 Flex 客户端,并通过此 soap 代理向第三方发送一些 soap 调用

flex 客户端有一个会话 id,它在它第一次与主 servlet 对话时设置,它返回一个 HTTP 标头,例如“Set-Cookie:”JSESSION: something; Path=/myApp"。然后将此 cookie 发送到服务器,以告知客户端关联到哪个会话。

问题在于,小肥皂代理返回一个带有会话 id 的 cookie(对于通过它进行的每个调用)——然后 Flex 客户端在与主 servlet 通信时使用这些 cookie。它不知道这些其他会话 id,然后当然没有任何作用......

我不希望从 soap 代理返回会话 cookie,并且我已经验证通过告诉 Apache 前端去除所有来自肥皂代理。不幸的是(由于一些设置限制),这不是我可以投入生产的方式,所以我需要以编程方式修复它。

如何让 servlet 不尝试设置任何会话 ID? 我相信我已经看到了告诉 Jetty(应用服务器)不要发送会话 ID 的方法,但这也会影响main servlet 也可以这样做,而且也不是可移植的。

代理 servlet 是一个非常基本的 Spring Controller(只是实现接口),所以基本上只是一个简单的 servlet。

【问题讨论】:

    标签: java apache-flex session session-cookies blazeds


    【解决方案1】:

    可以通过res.setHeader("Set-Cookie", null);删除cookie

    编辑:很高兴知道,这会删除 所有 cookie,因为它们都设置在同一个标​​头中。

    我建议您不要在您的 servlet 中这样做,过滤器更好,因为它的侵入性较小,例如:

    public void doFilter(ServletRequest request,
                ServletResponse response,
                FilterChain chain)
                    throws IOException, ServletException 
    {
        HttpServletResponse res = (HttpServletResponse) response;
    
        try
        {
            chain.doFilter(request, res);
        }
        finally 
        {
            res.setHeader("Set-Cookie", null);
        }
    }
    

    此解决方案的灵感来自this article at randomcoder。

    【讨论】:

    • 感谢您的回答,基里尔!顺便说一句-您是否隐含地说会话始终是在 Java Servlet 容器中创建的?我问是因为我不确定规范说什么。谁负责召开会议?
    • @oligofren 您使用responce.getSession() 创建会话。您说您有一个“SOAP 代理”,它究竟是如何代理的,以及在哪里代理? SOAP 响应来自的实际位置是否可以设置 cookie?
    • 好点!我从没想过,但是是的:它重定向到一个 Axis 服务(在 Glassfish 上运行),这当然可以设置会话 ID。在对一个简单的 servlet(sonatype.com/books/mvnex-book/mvnex-examples.zip 中的 ch-simple-web/simple-webapp 中的代码)进行了一些实验之后,我现在可以看到一个基本的 servlet 没有返回 JSESSIONID - 除非我执行 getSession()。所以你确实是对的 - 会话 cookie 来自我将请求代理到的服务器!
    猜你喜欢
    • 2015-09-23
    • 1970-01-01
    • 2010-11-17
    • 2014-05-02
    • 2021-08-19
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多