2

CQ5.5 SSO を構成し、@SlingFilter を使用して HTTP ヘッダー値を設定しようとしています。

SlingFilter が SSO 認証ハンドラーの後にリクエストを処理しているため、HTTP ヘッダーで検証済みのユーザーを見つけることができない実行タイミングの問題があるようです。

4

2 に答える 2

0

フィルタにサービス ランキングを設定して、実行の順序を制御できます。

@Properties({ @Property(name = Constants.SERVICE_DESCRIPTION, value = "Description"),
  @Property(name = Constants.SERVICE_VENDOR, value = "Vendor"),
  @Property(name = Constants.SERVICE_RANKING, intValue = -760, propertyPrivate = true),
  @Property(name = "filter.scope", value = "request", propertyPrivate = true) 
})

コンポーネントのプロパティを確認することで、既存のフィルターのサービス ランキングを確認できます。

http://localhost:4502/system/console/components/org.apache.sling.i18n.impl.I18NFilter

コンポーネントのサービス ランキングが同じ場合、その service.id を使用して順序が決定されるようです。

最近のリクエストを見ると、ファイラーが処理されている順序がわかります

http://localhost:4502/system/console/requests

リクエストを選択します。次のように表示されます。

0 (2013-04-04 15:12:56) LOG Calling filter: org.apache.sling.bgservlets.impl.BackgroundServletStarterFilter
0 (2013-04-04 15:12:56) LOG Calling filter: org.apache.sling.i18n.impl.I18NFilter
0 (2013-04-04 15:12:56) LOG Calling filter: org.apache.sling.rewriter.impl.RewriterFilter
0 (2013-04-04 15:12:56) LOG Calling filter: com.day.cq.wcm.core.impl.WCMRequestFilter
0 (2013-04-04 15:12:56) LOG Calling filter: com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet
2 (2013-04-04 15:12:56) LOG Calling filter: org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
2 (2013-04-04 15:12:56) LOG Calling filter: com.day.cq.wcm.mobile.core.impl.redirect.RedirectFilter

一部の古いフィルターは、このfilter.orderプロパティを使用します。これは、service.ranking プロパティが見つからない場合にのみ使用されます。SLING-1735を参照してください。

于 2013-04-04T14:58:46.860 に答える
-1

これは、ホワイトボード サポートを使用する Sling フィルターを使用する代わりに、標準の HTTP フィルターを使用することで解決されました - Apache Http Service Whiteboard 。ユーザーが認証された後に Sling フィルターが呼び出され、ロジックが機能するには、リクエストが Sling 認証レイヤーに到達する前にインターセプトする必要があります。したがって、それらを std Servlet Filter として登録する必要があります

@Component
@Service
@org.apache.felix.scr.annotations.Properties({
        @Property(name = "pattern", value = "/.*"),
        @Property(name = Constants.SERVICE_RANKING, intValue = 100000, propertyPrivate = false),
        @Property(name = "_usernameHeader", value = "SM_USER")
})
public class TestFilter implements javax.servlet.Filter {
于 2013-04-05T03:31:03.270 に答える