CQ5.5 SSO身份验证处理程序问题 - 无法从Sling Filter读取HTTP请求标头

时间:2013-04-04 14:37:03

标签: cq5 sling

我正在尝试使用@SlingFilter配置CQ5.5 SSO并设置HTTP标头值。

看起来有一个执行问题的调整,SlingFilter在SSO身份验证处理程序之后处理请求,因此它无法在Http Header中找到经过验证的用户。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

使用标准HTTP过滤器解决了这个问题,而不是使用白板支持使用Sling Filter - Apache Http Service Whiteboard。在用户通过身份验证后调用Sling Filters,并且我的逻辑工作我需要在请求到达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 {