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 属性时使用。见吊索 1735

于 2013-04-04T14:58:46.860 回答
-1

这是通过使用标准 HTTP 过滤器解决的,而不是使用白板支持的 Sling 过滤器 - Apache Http 服务白板。在用户通过身份验证后调用 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 回答