目的

ディスパッチャーモジュールの権限対応キャッシュ機能を有効にするには?

手順

 

この機能には、AEM にデプロイする追加のサーブレットが必要です(HEAD 要求に応答して、正しい HTTP コードを返すサーブレットをコーディングする必要があります)。デプロイメント後に、ユーザーがキャッシュされた URI へのアクセスを許可されているかどうかは、/bin/permissioncheck.html?uri=<handle> を要求することで確認します。

  1. 権限対応キャッシュを有効にするには、次のセクションを dispatcher.any 設定ファイルのファームに追加します。  以下のサンプル設定では、html ページのチェックのみが有効になります。

    # Authorization checker: before a page in the cache is delivered, a HEAD
    # request is sent to the URL specified in 'url' with the query string
    # '?uri=<page>'. If the response status is 200 (OK), the page is returned
    # from the cache. Otherwise, the request is forwarded to the render and
    # its response returned.
    /auth_checker
      {
      # request is sent to this URL with '?uri=<page>' appended
      /url "/bin/permissioncheck.html"
          
      # only the requested pages matching the filter section below are checked,
      # all other pages get delivered unchecked
      /filter
        {
        /0000
          {
          /glob "*"
          /type "deny"
          }
        /0001
          {
          /glob "*.html"
          /type "allow"
          }
        }
      # any header line returned from the auth_checker's HEAD request matching
      # the section below will be returned as well
      /headers
        {
        /0000
          {
          /glob "*"
          /type "deny"
          }
        /0001
          {
          /glob "Set-Cookie:*"
          /type "allow"
          }
        }
      }
  2. 次に、HEAD 要求に応答する以下の例のようなサーブレットを実装し、デプロイします。  200 応答は、ユーザーがディスパッチャーキャッシュから直接ファイルを取得するアクセス権を持っていることを意味します。  200 以外のステータスは、要求がキャッシュから提供されないことを意味します。

    以下は AEM 6 向けにサーブレットを実装するサンプルコードです(作成者:Dominique)。

     

    
    	
    
    
    
    
    

[1] サンプルコード

注意:

権限対応キャッシュのサーブレットのサンプルコードです。  以下のサーブレットは、認証されたユーザーが特定の URI を表示するアクセス権を持っている場合、200 応答で HEAD 要求に応答します。

dispatcher-psc-permissioncheck/core/src/main/java/com/adobe/support/security/dispatcher/PermissionHeadServlet.java
package com.adobe.support.security.dispatcher;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service
@Property(name="sling.servlet.paths", value= {"/bin/permissioncheck"})
public class PermissionHeadServlet extends SlingSafeMethodsServlet {
    private static final Logger log = LoggerFactory.getLogger(PermissionHeadServlet.class);
    
    public void doHead(SlingHttpServletRequest request, SlingHttpServletResponse response) {
        String uri = request.getParameter("uri");
        Resource test = request.getResourceResolver().resolve(uri);
        if(test != null && !test.isResourceType(Resource.RESOURCE_TYPE_NON_EXISTING)) {
        	response.setStatus(SlingHttpServletResponse.SC_OK);
        } else {
        	response.setStatus(SlingHttpServletResponse.SC_UNAUTHORIZED);
        }
    }
}

適用対象

Dispatcher 4.0.2 以降および AEM 6.x

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー