gpt4 book ai didi

java - 如何从存储库 Web 脚本以编程方式创建 Alfresco 站点?

转载 作者:太空宇宙 更新时间:2023-11-04 10:03:35 32 4
gpt4 key购买 nike

我已经实现了一个 Alfresco 存储库网页脚本(Java 语言),以编程方式创建一个新站点。

我注意到有一个 SiteService 接口(interface),我认为可以使用它来执行此操作 -

SiteInfo site = siteService.createSite("site-dashboard", "mySite", 
"mySite", "", SiteVisibility.PUBLIC);

但是,这会导致创建一个无法正常运行的网站,尽管它在 Alfresco Share 仪表板中可见,但我无法使用它。

然后我遇到了this代码示例,这正是我想要的。但该代码包含一个进行身份验证的部分,涉及将用户的登录名和密码详细信息发送到 dologin Web 服务。真的不想这样做。

但是由于用户已经通过 Alfresco Share 登录,因此他们应该已经经过身份验证。

如果我从代码中调用创建站点 Web 脚本,如示例所示(没有初始调用 dologin),我将收到 401(未经授权)返回代码。

所以我的问题是,如何告诉创建站点网页脚本我的身份验证?我读到有关使用身份验证票证 here 。此票证是否存储在 session 中?如果是,我如何在 Java 代码中访问它?如果我能拿到票,那么这足以调用创建站点的网页脚本。

更新:我已按照评论的建议添加了 alf_ticket 参数,但仍然收到 401 响应。

我当前的代码是:

    public NodeRef createServiceChange(String serviceChangeName) {

HttpClient client = new HttpClient();

String ticket = authService.getCurrentTicket();

PostMethod createSitePost = new PostMethod("http://localhost:8081/share/service/modules/create-site");

JSONObject siteObject = new JSONObject();
try {
siteObject.put("shortName", serviceChangeName);
siteObject.put("visiblity", "Public");
siteObject.put("sitePreset", "site-dashboard");
siteObject.put("title", serviceChangeName);
siteObject.put("description", serviceChangeName);
siteObject.put("alf_ticket", ticket);

createSitePost.setRequestHeader("Content-Type", "application/json");
createSitePost.setRequestHeader("Accept", "application/json");
createSitePost.setRequestEntity(new StringRequestEntity(siteObject.toString(), "application/json", "UTF-8"));

int status = client.executeMethod(createSitePost);
System.out.println("create a site script status :: " + status);

if (status == HttpStatus.SC_OK) {
System.out.println("Site created OK");
}
else{
System.out.println("There is error in site creation");
}
} catch (JSONException err) {
err.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;
}

最佳答案

所以我成功地以编程方式创建了一个网站,这就是我所做的:

首先,忘记编写存储库(平台)网页脚本。在 Alfresco 中创建站点是通过调用共享模块来完成的,因此您需要实现页面或自定义菜单项来创建站点。我在身份验证方面也遇到了很多问题,但如果您通过 Alfresco Share 登录系统,并在 Javascript 中使用提供的 Alfresco Ajax 请求,那么身份验证应该不成问题。

以下是我使用的组件:-

  1. 创建共享页面以创建您的网站。在 Freemarker 模板 (.ftl) 中添加一个表单来收集网站详细信息。
  2. 将表单上的按钮附加到以下 Javascript 函数。请注意,这是我根据网络上的各种代码片段拼凑而成的,因此可以进行一些清理。但它基本上对我有用 -

    function create_site()
    {
    var sc_form = document.forms.namedItem('sc_form');
    var name = sc_form.elements.namedItem('name').value;

    var url = Alfresco.constants.URL_CONTEXT + "service/modules/create-site";

    Alfresco.util.Ajax.request({

    method : Alfresco.util.Ajax.POST,

    url : url,

    dataObj: {
    sitePreset: "site-dashboard",
    visibility: "PUBLIC",
    title: name,
    shortName: name,
    description: name
    },

    requestContentType: Alfresco.util.Ajax.JSON,

    successCallback:
    {
    fn: function(res){
    alert("success");
    alert(res.responseText);
    },

    scope: this

    },

    failureCallback:
    {
    fn: function(response)
    {
    Alfresco.util.PopupManager.displayPrompt(
    {
    title: Alfresco.util.message("message.failure", this.name),
    text: "search failed"
    });
    },
    scope: this
    }
    });
    }

关于java - 如何从存储库 Web 脚本以编程方式创建 Alfresco 站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205943/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com