【问题标题】:Unable to publish XACML policy in wso2 application manager and throwing NoSuchMethodError exception无法在 wso2 应用程序管理器中发布 XACML 策略并抛出 NoSuchMethodError 异常
【发布时间】:2014-09-15 11:15:15
【问题描述】:

我按照以下链接提供的步骤在 wso2 应用程序管理器中创建策略并发布

http://wso2.com/library/articles/2014/02/use-of-wso2-api-manager-to-validate-fine-grained-policy-decisions-using-xacml/

创建 XACML 策略后尝试将其发布到 PDP,出现以下错误

[2014-09-15 15:52:53,007] ERROR - ApplicationDispatcher Servlet.service() for servlet bridgeservlet threw exception
java.lang.NoSuchMethodError: org.wso2.carbon.identity.entitlement.stub.EntitlementPolicyAdminServiceStub.publishPolicies([Ljava
g;Ljava/lang/String;ZI)V
        at org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient.publish(EntitlementPolicyAdminSer
        at org.apache.jsp.entitlement.publish_002dfinish_jsp._jspService(org.apache.jsp.entitlement.publish_002dfinish_jsp:133)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.wso2.carbon.ui.JspServlet.service(JspServlet.java:155)
        at org.wso2.carbon.ui.TilesJspServlet.service(TilesJspServlet.java:80)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)

我想将 XACML 策略集成到 WSO2 APIM 中。下面是我想在 wso2 api manager 中发布的 XACML 策略。

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="TestPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0">
 <Target>
  <AnyOf>
     <AllOf>
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
           <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">foo</AttributeValue>
           <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
        </Match>
     </AllOf>
  </AnyOf>
</Target>
<Rule Effect="Permit" RuleId="Rule-1">
  <Target>
     <AnyOf>
        <AllOf>
           <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
              <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">GET</AttributeValue>
              <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
           </Match>
        </AllOf>
     </AnyOf>
  </Target>
  <Condition>
     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
        <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/>
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
     </Apply>
  </Condition>
</Rule>
<Rule Effect="Deny" RuleId="Deny-Rule"/>
</Policy>        

【问题讨论】:

  • 您能分享一下您的 XACML 政策吗?
  • 嗨,David Brossard,我已经添加了我想要发布的 XACML 策略。请告诉我如何解决上述问题。
  • 该政策对我来说看起来不错。我成功地将它导入到 Axiomatics Policy Administration Point。它验证为 XACML 3.0。你用什么工具写的?
  • 在 WSO2 API 管理器中,我通过“策略管理”编写了该策略。使用 try 选项我能够验证该策略。但是当我尝试发布政策时,它给出了上述错误..

标签: wso2 wso2is wso2-am


【解决方案1】:

这不是 XACML 政策的错误。根据错误,它清楚地表明 java.lang.NoSuchMethodError: org.wso2.carbon.identity.entitlement.stub.EntitlementPolicyAdminServiceStub.publishPolicies([Ljavag;Ljava/lang/String;ZI)V

所以这是您调用的 Web 服务 API 的问题。这意味着很可能 Web 服务 API 发生了 API 更改,并且某些组件仍在调用旧 API。由于您已将 XACML 功能安装到 API 管理器中,因此您可能安装了一些旧版本的 XACML 功能。但是请您检查系统中是否有以下jar文件的两个版本。

  1. 您可以进入&lt;APIM_HOME&gt;/repository/components/plugin目录并搜索名称。

org.wso2.carbon.identity.entitlement.stub

  1. 如果有两个jar文件,请删除一个jar文件(比如旧版本)

  2. 请删除bundle.info 文件中该jar 文件的OSGI 条目,该文件位于&lt;APIM_HOME&gt;repository/components/default/configuration/org.eclipse.equinox.simpleconfigurator 目录中

  3. 重新启动服务器并尝试您的操作。

  4. 如果不起作用,请删除其他 jar 文件并添加旧 jar 文件,并记住在步骤 3 中提到的上述文件中添加新删除的条目

这不是解决此问题的正确方法。我想,最好的事情是,您可以通过为您正在使用的 APIM 版本找到正确的 P2 存储库来重新安装 XACML 功能。你可以从here找到它

【讨论】:

  • Thanq Asela.. 问题已解决。现在我可以发布 api。
【解决方案2】:

这是由于您安装了错误的 XACML 和 XACML 中介功能版本。请使用管理控制台再次卸载功能并重新安装正确的版本。

示例: 如果您使用 WSO2 APIM 1.7

  • XACML 中介 4.2.2
  • XACML 4.2.1

是您应该选择的正确版本。您可以使用this table 找到它。

参考:https://wso2.org/jira/browse/APIMANAGER-3106

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多