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

Aem CQ5.5 SSO身份验证处理程序问题-无法从Sling筛选器读取HTTP请求标头,aem,sling,Aem,Sling,我正在尝试配置CQ5.5 SSO,并使用@SlingFilter设置HTTP头值 似乎存在执行时间问题,SlingFilter在SSO身份验证处理程序之后处理请求,因此无法在Http标头中找到已验证的用户。您可以在筛选器上设置服务排名以控制执行顺序 @Properties({ @Property(name = Constants.SERVICE_DESCRIPTION, value = "Description"), @Property(name = Constants.SERVICE_VE

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


似乎存在执行时间问题,SlingFilter在SSO身份验证处理程序之后处理请求,因此无法在Http标头中找到已验证的用户。

您可以在筛选器上设置服务排名以控制执行顺序

@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属性时使用。请参阅。

您可以在筛选器上设置服务排名以控制执行顺序

@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属性时使用。请参阅。

这是通过使用标准HTTP筛选器而不是使用白板支持的Sling筛选器解决的-. 在用户经过身份验证后调用Sling过滤器,为了使我的逻辑正常工作,我需要在请求到达Sling身份验证层之前拦截请求。所以我需要将它们注册为stdservlet过滤器

@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 {

通过使用标准HTTP筛选器而不是使用白板支持的Sling筛选器解决了此问题-. 在用户经过身份验证后调用Sling过滤器,为了使我的逻辑正常工作,我需要在请求到达Sling身份验证层之前拦截请求。所以我需要将它们注册为stdservlet过滤器

@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 {

过滤器是按顺序排列的,因此不应该存在计时问题。你找到昨天提出的问题的解决办法了吗。希望我下面的回答能帮助你确认这一点。过滤器是按顺序排列的,所以不应该有时间问题。你找到昨天提出的问题的解决办法了吗。希望我下面的回答能帮助您确认这一点。感谢diffa的评论。在标准servlet筛选器(Apache Http服务白板支持)服务中,排序是排序筛选器的正确方法。您应该接受帮助解决问题的答案,无论是我的还是您自己的。感谢diffa的评论。在标准servlet过滤器(Apache Http服务白板支持)中,Service.ranking是订购过滤器的正确方式。您应该接受帮助解决问题的答案,无论是我的还是您自己的。