如何通过CXF拦截器使会话无效?

时间:2015-06-16 08:27:54

标签: cxf

我是Cxf webservice的新手,并且对所提供的信息感到不知所措。我编写了一个扩展AbstractPhaseInterceptor的cxf拦截器(cxf:outInterceptors)。我试图在服务执行后使当前会话无效。我的问题是:

  1. 我是否在构造函数中使用了正确的阶段? (Phase.Send)
  2. 如何从邮件中获取会话信息?现在,对于下面的方法,请求实例返回null。
  3. 或者有更好的方法吗?

      public ServiceSessionInvalidator() {
          super(Phase.SEND);
      }
    
    @Override
    public void handleMessage(Message message) throws Fault {
    
        System.out.println("Hitting Handler");
    
        HttpSession session;
    
        HttpServletRequest req = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
    
        session = (req != null)? req.getSession(): null;
    
        if(req == null ){
    
            System.out.println("Request is Null");
    
        }
    
    
    }
    

    输出:

    16 Jun 2015 13:35:40 INFO   - Inbound Message
    ----------------------------
    
    ID: 1
    
    Address: http://localhost:8090/services/VariableService/variableService/
    
    Http-Method: GET
    
    ---
    ---
    
    Hitting Handler
    
    Request is Null
    
    16 Jun 2015 13:35:41 INFO   - Outbound Message
    
    ---------------------------
    
    ID: 1
    
    Response-Code: 200
    

2 个答案:

答案 0 :(得分:2)

ArrayList

答案 1 :(得分:1)

我对此不确定,但请查看CXF阶段说明,例如here。在处理“协议”和“字节”级别的消息之后,Send是最后一个阶段。会话的概念与HTTP协议有关,请求也是如此(参见类名)。

我的建议:试试Phase.MARSHAL