Alfresco 如何以编程方式在共享中创建站点?

Alfresco 如何以编程方式在共享中创建站点?,alfresco,alfresco-share,Alfresco,Alfresco Share,这个话题在社区(论坛、博客帖子等)中已经出现了很多次,结论是应该做一个REST帖子调用来共享和url/service/modules/create site 原因是一些特定于冲浪的东西,如网站仪表板,是从共享端创建的 然而,我整天都在从不同的角度尝试这种方法,结果总是在响应中出现HTTP 200,并且没有创建共享站点。相当令人沮丧 我在Alfresco Enterprise 4.2.3.3上运行此功能(我怀疑我的问题是由于最近的更改) 为了将其简化为易于复制的内容,我将遵循Martin Berg

这个话题在社区(论坛、博客帖子等)中已经出现了很多次,结论是应该做一个REST帖子调用来共享和url
/service/modules/create site

原因是一些特定于冲浪的东西,如网站仪表板,是从共享端创建的

然而,我整天都在从不同的角度尝试这种方法,结果总是在响应中出现HTTP 200,并且没有创建共享站点。相当令人沮丧

我在Alfresco Enterprise 4.2.3.3上运行此功能(我怀疑我的问题是由于最近的更改)

为了将其简化为易于复制的内容,我将遵循Martin Bergljung关于主题()的博客文章,从使用curl开始,如下所示:

  • 创建一个包含登录凭据(login.txt)的文本文件,其中包含以下内容(更改为适当的值):
    username=admin&password=admin

  • 使用json创建文本文件以创建站点(site_data.json)
    {“可见性”:“公共”、“标题”:“我的测试站点”、“简称”:“我的测试站点”,
    “描述”:“从命令行创建的我的测试站点”,“站点预置”:“站点仪表板”}
    

  • 通过请求票证获取JSESSIONID:
    curl-v-d@login.txt-H“内容类型:application/x-www-form-urlencoded”http://localhost:8081/share/page/dologin

  • 将结果JSESSIONID值复制到以下curl调用中:
    curl-v-d@site_data.json-H“Cookie:JSESSIONID=“-H”内容类型:application/json“-H”接受:application/json”http://localhost:8081/share/service/modules/create-网站

curl的输出:

* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8081 (#0)
> POST /share/service/modules/create-site HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8081
> Cookie:JSESSIONID=5963B948684F562A278909AF466D2306
> Content-Type:application/json
> Accept:application/json
> Content-Length: 196
> 
* upload completely sent off: 196 out of 196 bytes
< HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Content-Language: en-US
< Content-Length: 0
< Date: Tue, 02 Dec 2014 13:57:02 GMT
< 
* Connection #0 to host localhost left intact
获取cookie值并插入Daves代码(去掉csrf内容):

curl'http://localhost:8081/share/service/modules/create-site'-H'Cookie:JSESSIONID=058A52486E4EB12F94D1F95302732616;alfLogin=1417618589;alfUsername3=admin;'-H'来源:http://localhost:8081'-H'接受编码:gzip,deflate,sdch'-H'接受语言:en-US,en;q=0.8'-H'用户代理:Mozilla/5.0(Macintosh;英特尔Mac OS X 10_9_1)AppleWebKit/537.36(KHTML,如Gecko)Chrome/32.0.1700.107 Safari/537.36'-H'内容类型:application/json'-H'接受://*'-H'参考:http://localhost:8081/share/page/site/erik/dashboard'-H'X-Requested-With:application/json'-H'连接:keep-alive'-data-binary$'{“可见性”:“公共”,“标题”:“erik'”,“短名”:“erik'”,“说明”:“此网站是自动生成的”,“网站预设”:“网站仪表板”}'--压缩的

仍然没有生成共享站点,仍然是HTTP 200响应。日志中也没有错误。这让我发疯:(

新更新(有效!):


我现在发现你需要“触摸”在使用post调用create site之前,在进行登录调用后创建一个共享webscript。我通过在两者之间发出get请求来完成此操作。这需要以某种方式初始化共享会话。

这是我用于以编程方式生成站点的curl命令。我插入JSSessionID、LOGINCOOKIECONTENTS和CSRFTOKEN(两次)手动获取内容,但按编程方式获取内容应该是可行的

curl 'http://localhost:8081/share/service/modules/create-site' -H 'Cookie: JSESSIONID={JSESSIONID}; alfLogin={LOGINCOOKIECONTENTS}; alfUsername3=admin; Alfresco-CSRFToken={CSRFTOKEN};' -H 'Origin: http://localhost:8081' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36' -H 'Content-Type: application/json' -H 'Accept: */*' -H 'Referer: http://localhost:8081/share/page/site/auto-gen-0/dashboard' -H 'X-Requested-With: application/json' -H 'Connection: keep-alive' -H 'Alfresco-CSRFToken: {CSRFTOKEN}' --data-binary $'{"visibility":"PUBLIC","title":"auto-gen'$I'","shortName":"auto-gen-'$I'","description":"This site is auto generated","sitePreset":"site-dashboard"}' --compressed
预期的答复是:

{
   "success": true
}

我在这里看不到一个问题。那太好了,现在我只需要使用Spring Surf HttpClient将其翻译成一些java代码(如果您有这种代码,请随意分享:)您从何处获取请求的Alfresco CSRFToken?它位于名为:Alfresco CSRFToken的cookie中。如果您已禁用CSRF令牌筛选器(根据您的问题),则可以删除整个cookie(Alfresco CSRFToken={CSRFToken};)从文章标题。还有一件事要添加,CSRF令牌cookie值需要在设置之前进行url解码。对不起,我忘记了。它不是那么简单:当CSRF令牌在cookie中时,它被编码,但在标题中它被解码。。。
{
   "success": true
}