2017-02-22 49 views
0

我目前正在尝试使用aui在数据表中自动生成actionUrls。Liferay AUI createUrl() - 拒绝进程操作

我已经使用formater生成链接,但是,只要我尝试使用其中一个链接执行操作,它将被拒绝并且操作不会执行。我假设这是跨站点脚本保护措施的一部分。

[http-bio-8080-exec-2][SecurityPortletContainerWrapper:630] Reject process action for /c/portal/layout on functiontest_WAR_functionTestportlet 

我生成这样的链接:

<aui:script> 
AUI().use( 
      'aui-datatable', 
      'datatable-sort', 
      'datatable-paginator', 
      'aui-datatable-highlight', 
      'liferay-portlet-url', 
      function(A) { 
      var columns =[{ 
       label : 'ID', 
       key : 'testVar', 
       allowHTML : true, 
       sortable : true, 
       formatter : function(o) { 

        var url = Liferay.PortletURL.createActionURL(); 
        url.setWindowState("<%= LiferayWindowState.NORMAL.toString()%>"); 
        url.setPortletMode("<%= LiferayPortletMode.VIEW %>"); 
        url.setPortletId("<%= themeDisplay.getPortletDisplay().getId() %>"); 
        url.setPlid("<%= plid %>"); 
        url.setParameter("javax.portlet.action","actionTest"); 
        url.setParameter("testVar",o.data.testVar); 

        return '<a href="'+ url +'">' + o.data.TestVar + '</a>'; 
       } 
      }]; 
     var table = new A.DataTable(
       { 
        ... 
       } 
      ).render('#DataTable'); 
     ..... 
</aui:script> 

有谁知道我怎么才能让刚生成的URL的执行,而不禁用安全?

亲切的问候 约翰·史密斯

回答

0

这时候的身份验证令牌不会在你的动作URL存在发生。您可以添加auth参数,或者你有3个选择跳过这种情况下:

编辑portal-ext.properties:

auth.token.ignore.actions=.... 

添加的init-参数去的portlet.xml:

<init-param> 
    <name>check-auth-token</name> 
    <value>false</value> 
</init-param> 

编辑门户 - ext.propertie S(不推荐)

auth.token.check.enabled=true 
+0

这是伟大的工作,我谢谢你。但是,如果我想将它添加到参数中,我将如何检索auth令牌? –

+0

Liferay默认添加此参数,因为它在这里说: https://web.liferay.com/es/community/wiki/-/wiki/Main/Authentication+Token 如果您有新的自定义操作或portlet,请检查您是否必须将其添加到具有下列属性的白名单: “portlet.add.default.resource.check.whitelist” “portlet.add.default.resource.check.whitelist.actions” –