4

屋外で Web スクリプト内の現在のユーザー名を取得する方法はありますか?? 私は Web スクリプトを呼び出しており、彼がログインした現在のユーザー名とパスワードにアクセスしたいと考えています。ここに私の記述子があります:

<webscript>
  <shortname>Save Document </shortname>
  <description>Save description</description>
  <url>/alfresco/save</url>
  <format default="">argument</format>
  <family>Active document</family>
</webscript>

私のウェブスクリプトコード:

public void execute(WebScriptRequest req, WebScriptResponse res)
            throws IOException {
        String nodeRefString = null;
        try {
            nodeRefString = req.getParameter("nodeRef");

            if(nodeRefString != null && !nodeRefString.isEmpty()) {
                AuthenticationUtil.runAs(new RunAsWork<String>() {
                    public String doWork() throws Exception {

                        String userName = AuthenticationUtil.getFullyAuthenticatedUser();
                        System.out.println("user name =" + userName);
                        if(personService != null) {
                            System.out.println("personService initialized successfully");
                            NodeRef personNode = personService.getPerson("mahesh");
                            System.out.println("password =" + nodeService.getProperty(personNode, ContentModel.PROP_PASSWORD));
                        } else {
                            System.out.println("person service is null");
                        }
                        NodeRef nodeRef = new NodeRef(nodeRefString);
                        setNodeRef(nodeRef);
                        setFileName((String) nodeService.getProperty(nodeRef,ContentModel.PROP_NAME));
                        return null;
                    }
                }, AuthenticationUtil.getSystemUserName());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

認証タグを Web スクリプト記述子に追加する必要がありますか?? AuthenticationUtil.getFullyAuthenticatedUser(); の両方を試しました。および AuthenticationUtil.getRunAsUser()。どちらもユーザー名として「system」を返しています。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

5

JavascriptコントローラーまたはFreemarkerテンプレートを使用している場合:

person.properties["user:username"]

Javaコントローラーを使用している場合:

/**
 * Get the user that is currently in effect for purposes of authentication.  This includes
 * any overlays introduced by {@link #setRunAsUser(String) runAs}.
 * 
 * @return              Returns the name of the user
 * @throws AuthenticationException
 */
org.alfresco.repo.security.authentication.AuthenticationUtil.getRunAsUser()

編集:あなたのコメントによると、あなたはAuthenticationUtil.runAs家族を使用しています。この場合、現在の認証コンテキストへの瞬間的な変更を無視する以下を使用する必要があります。

/**
 * Get the fully authenticated user. 
 * It returns the name of the user that last authenticated and excludes any overlay authentication set
 * by {@link #runAs(org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork, String) runAs}.
 * 
 * @return              Returns the name of the authenticated user
 * @throws AuthenticationException
 */
org.alfresco.repo.security.authentication.AuthenticationUtil.getFullyAuthenticatedUser()
于 2012-06-22T13:50:27.360 に答える
0

実際のユーザー名を取得するには、innerClassAuthenticationUtil.getFullyAuthenticatedUser()の外に配置する必要があります。RunAsWork

したがって、コードは次のようになります

public void execute(WebScriptRequest req, WebScriptResponse res)
        throws IOException {
    String nodeRefString = null;
    try {
        nodeRefString = req.getParameter("nodeRef");
        final String userName = AuthenticationUtil.getFullyAuthenticatedUser();

        if(nodeRefString != null && !nodeRefString.isEmpty()) {
            AuthenticationUtil.runAs(new RunAsWork<String>() {
                public String doWork() throws Exception {

                    System.out.println("user name =" + userName);
                    if(personService != null) {
                        System.out.println("personService initialized successfully");
                        NodeRef personNode = personService.getPerson("mahesh");
                        System.out.println("password =" + nodeService.getProperty(personNode, ContentModel.PROP_PASSWORD));
                    } else {
                        System.out.println("person service is null");
                    }
                    NodeRef nodeRef = new NodeRef(nodeRefString);
                    setNodeRef(nodeRef);
                    setFileName((String) nodeService.getProperty(nodeRef,ContentModel.PROP_NAME));
                    return null;
                }
            }, AuthenticationUtil.getSystemUserName());
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2013-05-31T14:06:45.950 に答える