2015-06-16 8 views
0

Я новичок в Cxf webservice и немного перегружен предоставленной информацией. Я написал cxf Interceptor (cxf: outInterceptors), который расширяет AbstractPhaseInterceptor. Я пытаюсь сделать недействительным текущий сеанс после выполнения службы. Мои вопросы:Как аннулировать сеанс CXF Interceptor?

  1. Я использую правильную фазу в конструкторе? (Phase.Send)
  2. Как получить информацию о сеансе из сообщения? Прямо сейчас, для экземпляра запроса метода ниже null.

Или Есть ли лучший подход к этому?

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 

ответ

1

Я не уверен насчет этого, но посмотрите на CXF описание фазы, как here. Send - последний этап, после обработки сообщения на уровне «протокол» и «байт». Концепция сеанса связана с протоколом HTTP, то же самое верно для запроса (см. Имена классов).

Мое предложение: попробуйте Phase.MARSHAL.

+0

Я сделал это, работая недействительным сеансом на входящей фазе (INVOKE), не затрагивая ответ. Я не был уверен, что это преждевременно прекратит запрос. Но запрос пробился. – Forkmohit

0
@Resource 
WebServiceContext wsContext; 
@Context 
private HttpServletRequest request; 



private HttpServletRequest invalidateSession() { 
    MessageContext mc = wsContext.getMessageContext(); 
    HttpServletRequest req; 
    if (mc != null) { 
     req = (HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST); 
    } else { 
     req = request; 
    } 

    req.getSession().invalidate(); 
} 
Смежные вопросы