2012-12-12 56 views
4

由于某些特定原因,我需要自动为每个请求的URL添加或附加一个参数,当且仅当该参数自第一个请求以来已存在于URL中。换句话说,如果我的网址为/share/page/site/sample/documentlibrary?embedded,则对/share/page/site/sample/[whatever]的每个请求都必须包含嵌入参数以及原始请求可能添加的其他参数。如何在每个HTTP请求上自动添加参数?

我正在使用Alfresco Share(v4.2.b)什么意思是说Web应用程序已经存在,尽管我可以执行自定义,但我有局限性,因为我没有完全控制它。如果这是我从头开始创建的网络应用程序,它不会是一个问题。根据我的限制,理想情况下解决方案应该尽可能少侵入。同时,如果它是一个基于JavaScript的解决方案,使用YUI而不是其他库是一个优点,但不是一个要求。

我一直在寻找在寻找一种方法,之后我心目中的下一个可能的解决方案:

  1. 通过添加参数每个页面卸载之前URL中使用的JavaScript。喜欢的东西:

    window.onbeforeunload = function(e) { 
         // Add parameter to target URL 
         }; 
    

    但我相信,我在读并根据一些测试中,我这样做是行不通的。看起来有一种安全限制(顺便说一下)。

  2. 通过使用JavaScript也更新每个链接的href属性(<a/>),一旦页面完成加载。例如,/share/page/site/sample/document-details?nodeRef=workspace://SpacesStore/089acea3-3b37-403d-9a8d-ae484ddd2ccb可以转换为/share/page/site/sample/document-details?nodeRef=workspace://SpacesStore/089acea3-3b37-403d-9a8d-ae484ddd2ccb&embedded。该解决方案的问题是,这两种形式的GET或POST和HREF使用JavaScript将超出范围的触发...

  3. 使用任何URL重写技术或类似图书馆UrlRewriteFilter(没有时间还没有测试它,抱歉)。

  4. 创建一个露天分享extension module其更改或更新每一个请求,也许有一个模块或子评价者的帮助。我不知道它是否适用于扩展模块,但我相信我可以在任何可以对请求执行更改的地方阅读。

我必须添加(对于那些与Alfresco分享知识)选项1,2和4将作为扩展模块实现。

那么,我希望我已经解释了我的问题。我强烈感谢一些建议或可能的方法。无论如何,我会继续努力,我会提出任何更新。

回答

0

没有使用过Alfresco,但另外一个选择是拥有一个自定义的JSP标签。

让我们称之为customlink,然后当您在页面上呈现链接时,请使用此自定义jsp标记而不是<a>标记。然后

E.g

<mynamespace:customlink href="/somelink">My Content</mynamespace:customlink> 

定制JSP标签可以是负责检查的请求的查询字符串参数,如果存在,那么其追加到URL,并打印查询字符串的标签。

这有利于不依赖JS或将任何这些暴露给客户端。它还允许将来进一步扩展。

+0

恐怕不可能做到。我不能在Alfresco Share中做这样的事情。共享是一个已经存在的Web应用程序,您可以自定义它创建扩展模块,大致可以防止部分渲染,替换部分,在部分之前或之后添加自定义内容,而不是太多。我知道如果你从未与Alfresco Share合作过,那么很难弄清楚我所拥有的限制。 –

2
  1. 如果是针对每个请求,那么过滤器是最好的。共享已经像你所说的那样使用了urlrewrite,所以改变默认设置并添加你的参数。

  2. 如果您有分享知识,则覆盖所包含的模板会更好: 覆盖alfresco-template.ftl它位于templates/org/alfresco/include中。生成页面时始终加载此模板。它还具有为Liferay Portlet定义的portletMode。

  3. 我们所做的嵌入documentlibrary是定义我们自己 份额自定义页面,所以我并不需要“总是”目前ARG任何 更多。

+0

我从来没有明确使用过UrlRewrite,你大概知道添加'urlrewrite.xml'需要什么吗?关于你的第二个选择,我对Share有一些了解,但我不明白你的建议。关于第三个选项,我对嵌入式文档库(http://stackoverflow.com/a/13376026/1514315)也做了同样的事情,但是我想稍微进一步讨论一些超出范围的原因(如果你想要我可以与你分享并讨论,可能你对此感兴趣)。谢谢。 –

+0

如果你看到urlrewrite它只是代理它,所以你可以添加你的静态参数。如果您想要更多控制,那么只需在web.xml中添加另一个自己的Java过滤器并编写您的Java代码以将您的参数或属性添加到请求中。对于选项2和3,你需要提供额外的信息,通常你需要param在你的共享代码的某个地方进行检查,所以基本上用2和3你不需要有一个参数,你可以使用一个JS全局初始化。 –

+0

实际上,在问这个问题之前,我的嵌入式文档库工作正常,问题在于,如果您访问文档详细信息,嵌入模式会丢失,因为我用它来表示它的参数不再可用。基本上我需要的是找到一种方法来保持信号的嵌入模式,就像开箱即用的portlet扩展一样。顺便说一下,如果参数使用自定义评估程序存在,我使用扩展模块隐藏特定区域。 –

1

怎么样使用mod_proxy,然后使用mod_rewrite重定向用户的请求,如果他们不已经包含了强制的参数通过Apache httpd的代理连接?如果使用RewriteRule指令,则可以指定相当丰富的表达式,如果该参数尚不存在,则会添加参数(docs

+0

这听起来很有希望,但我已经使用Apache HTTPd,所以这是我必须调查的东西。我会强烈考虑你的建议,谢谢。 –

相关问题