如何使用WSS4J拦截器在Web服务方法中获取经过身份validation的用户

我在Spring中托管了Apache CXF服务。 我正在使用WSS4J拦截器来validation用户名/密码安全性以访问服务器。 validation工作正常,如果我从SoapUI发送错误的凭据我不能按预期使用该服务。 如果我发送正确的凭据,服务没有问题。 这是我在spring上下文文件中的配置。

    <!---->              

现在我需要能够在我的服务方法中访问我的身份validation用户,如下所示:

 @WebResult(name = "UpdatePatternResponse", targetNamespace = "http://test.com/schemas/xsd/myservice/", partName = "UpdatePatternResponse") @WebMethod(operationName = "UpdatePattern", action = "UpdatePattern") @Generated(value = "org.apache.cxf.tools.wsdlto.WSDLToJava", date = "2015-02-19T12:49:59.491-05:00") public test.com.schemas.xsd.myservice.UpdatePatternResponse updatePattern( @WebParam(partName = "UpdatePatternRequest", name = "UpdatePatternRequest", targetNamespace = "http://test.com/schemas/xsd/myservice/") test.com.schemas.xsd.myservice.UpdatePatternRequest updatePatternRequest ) throws SIASFaultMessage{ . . User myAuthenticatedUser = //HOW TO GET THE USER??? ..... . . . } 

如何在Apache CXF服务方法中获取经过身份validation的用户?

我发现这是与这样一个重要主题有关的唯一问题,所以我想分享我为CXF 3.1.x找到的内容。

基本思路与@ alfredo-a相同。 这是代码:

 Message message=PhaseInterceptorChain.getCurrentMessage(); SecurityContext context=message.get(SecurityContext.class); String userName=context.getUserPrincipal().getName(); 

我希望这对某人有帮助。

干杯!

我终于明白了,感谢这个链接:

有没有办法从CXF中的JAX-RS REST资源访问CXF消息交换?

这是使用WSSJ4拦截器获取用户名的方法:

 @WebResult(name = "UpdatePatternResponse", targetNamespace = "http://test.com/schemas/xsd/myservice/", partName = "UpdatePatternResponse") @WebMethod(operationName = "UpdatePattern", action = "UpdatePattern") @Generated(value = "org.apache.cxf.tools.wsdlto.WSDLToJava", date = "2015-02-19T12:49:59.491-05:00") public test.com.schemas.xsd.myservice.UpdatePatternResponse updatePattern( @WebParam(partName = "UpdatePatternRequest", name = "UpdatePatternRequest", targetNamespace = "http://test.com/schemas/xsd/myservice/") test.com.schemas.xsd.myservice.UpdatePatternRequest updatePatternRequest ) throws SIASFaultMessage{ . . Message message = PhaseInterceptorChain.getCurrentMessage(); WSUsernameTokenPrincipal principal = (WSUsernameTokenPrincipal)message.get("wss4j.principal.result"); String userName = principal.getName(); . . . }