我正在尝试使用@SlingFilter配置CQ5.5 SSO并设置HTTP标头值。
看起来有一个执行问题的调整,SlingFilter在SSO身份验证处理程序之后处理请求,因此它无法在Http Header中找到经过验证的用户。
答案 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 {