0

制限付きアクセスと言うとき、私は作成者を制限しているのではなく、私の Web サイトのエンド ユーザーを制限していることを理解してください。ですから、CUG(Closed User groups) については教えないでください。

ユーザー (エンド ユーザー) がログインすると、ホームページにリンクがあり<a Href="xxx"> Download</a>、xxx は DAM に存在するファイルのパスである CQ5 Web サイトを作成しています。

ユーザー (作成者ではなくエンド ユーザー) がダウンロードをクリックするたびに、ファイルをダウンロードできます。

私が望むのは、ユーザーが上記のリンクをクリックするたびに、ユーザーが私の Web サイトにログインしているかどうかを検証し、ユーザーがファイルをダウンロードできるようにすることです。

これを行う 1 つの方法は、サーブレットを作成し、上記のリンクをサーブレットにマップし、サーブレットの doGet でユーザーを認証し、ドキュメントのダウンロードを許可することです。ただし、ここでは CQ5 の RESTful な性質を利用していません。

認証フィルターなどとして機能する DAM の特定のフォルダーの認証サーブレットまたはフィルターを作成する方法はありますか? 私は理にかなっていますか?これは可能ですか、またはこれに代わるものはありますか? CQのおすすめは?

4

4 に答える 4

0

これには sling 機能を使用するため、FilterChain を使用します。ユーザー ID に基づく認証ブロック要求を使用します。フィルターでは、ロジックを使用できます-値が「認証済み」の変数を使用します。ログインするときは、ユーザー名とパスを使用して、値が「認証済み」の追加変数を送信します (ユーザーがゲストではないことを示します)。フィルターでこの条件を確認します。

于 2014-07-09T09:39:38.903 に答える
0

回避策で解決しました。しかし、これには問題があります。

Sling フィルターを作成し、アクセスを制限したいフォルダーにマップしたので、誰かがそのフォルダーまたはサブフォルダー/ファイルを呼び出した場合、要求はフィルターを通過します。

私のフィルターでは、ユーザーがログインしているかどうかを確認します。しかし、現在発生している問題は、このフォルダーにアクセスしたい人は誰でも、セッションが設定されるアプリケーションにログインする必要があるということです。また、管理者 (CQ メインの作成者はフォルダー自体にアクセスできません。)

バンドル内のフィルターが CQ 管理者による DAM へのアクセスを妨げているため、管理者は私のバンドル (上記のフィルターを含むもの) を停止してから DAM フォルダーにアクセスする必要があります。簡単な解決策はありますか?

コード:

package com.xxx.hiresite.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingFilter;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingFilter(order = -1000)
@Properties({
    @Property(name="service.pid", value="com.xxx.hiresite.filters.DAMAccessFilter",propertyPrivate=false),
    @Property(name="service.description",value="DAM Documents Authentication Filter", propertyPrivate=false),
    @Property(name="service.vendor",value="Zensar Tech", propertyPrivate=false),
    @Property(name="pattern",value="/content/dam/xxxdocuments/.*", propertyPrivate=false)   
})
public class DAMAccessFilter implements Filter{
    private final Logger log = LoggerFactory.getLogger(this.getClass());



    @Reference
    protected ResourceResolverFactory resolverFactory;

    public void destroy() { 

    }

    public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException {
        // Authentication Filter for the whole application
        log.info("DAMAccessFilter Invoked***************************");

        HttpServletRequest httpServletRequest = (HttpServletRequest)request;
        String path =httpServletRequest.getRequestURI();
        log.info("Request URI ::"+path);
        HttpSession session = httpServletRequest.getSession(false);
        if(session ==null || session.getAttribute("userId")==null)
        {
            log.info("DAMAccessFilter :: Not Logged in");
            HttpServletResponse httpResponse = (HttpServletResponse)response;
            httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
        }
        else
        {
            log.info("DAMAccessFilter :: Logged in");
            chain.doFilter(request, response);
            log.info("DAMAccessFilter Done");
        }   

    }

    public void init(FilterConfig config) throws ServletException {

    }

}
于 2014-07-18T08:35:04.120 に答える