如何使用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(); . . . }