您可以在Colm O hEigeartaigh 的博客上找到执行基于 XACML (XACML 3.0) 授权的 CXF 拦截器示例(Colm 是主要的 CXF 开发人员之一)。CXF 拦截器的实际源代码:XACML3AuthorizingInterceptor。它使用 OpenAZ 作为 XACML 实现,但您可以调整它以使用另一个 XACML 实现,例如 David Brossard 在此处提到的 Axiomatics,或 AuthzForce(支持嵌入式或远程 RESTful PDP 模式),或XACML末尾提到的其他实现TC 的页面。
CXF 拦截器的第一个重要部分是在方法的开头handleMessage(Message message)
:
SecurityContext sc = message.get(SecurityContext.class);
为您提供有关经过身份验证的用户的SecurityContext
信息,例如用户角色,您可以将其用作 XACML 请求中的 XACML 主题属性。
该代码使用DefaultXACML3RequestBuilder 类进一步创建 XACML 请求,该类Message
使用CXFMessageParser从 CXF 中提取其他信息- 您可以在cxf-rt-security-saml库中找到这些信息 - 例如 SOAP 服务名称、操作名称(如WSDL)和端点 URI:
CXFMessageParser messageParser = new CXFMessageParser(message);
...
String actionToUse = messageParser.getAction(action);
...
QName serviceName = messageParser.getWSDLService();
QName operationName = messageParser.getWSDLOperation();
...