gpt4 book ai didi

osgi - Cq5.5 将 servlet 过滤器应用于特定路径

转载 作者:行者123 更新时间:2023-12-04 13:39:50 26 4
gpt4 key购买 nike

我正在 cq5.5 中处理自定义表单处理程序,并且一切顺利。我现在正在努力锁定一些安全性,我的任务之一是对表单处理程序路径实现请求限制过滤器。

目前我有类似的东西

@Component(immediate = true, metatype = true)

@Service(javax.servlet.Filter.class)

@Properties({
@Property(name="service.pid", value="com.xxxxxx.cq.core.filter.FormFilter",propertyPrivate=false),
@Property(name="service.description",value="FormFilter", propertyPrivate=false),
@Property(name="service.vendor",value="xxxxxx - Microsites", propertyPrivate=false),
@Property(name = "filter.scope", value = "request"),
@Property(name = "sling.filter.scope", value = "request"),
@Property(name = "service.ranking", intValue = 100001)
})

public class FormFilter implements javax.servlet.Filter {
private Logger LOGGER = LoggerFactory.getLogger(TrackingFilter.class.getName());
private static final Object lock = new Object();

@Override
public void doFilter(ServletRequest pRequest, ServletResponse pResponse, FilterChain pChain) throws IOException, ServletException {
//my filter stuff
}
}

这工作正常,但我想将其锁定为仅在特定路径上运行。

感谢您的任何见解。

- - 编辑 - - -
在做了更多研究之后,我发现一些帖子指出无法将过滤器注册到默认 ServletFilter 处理程序的指定路径。基本上我发现的这个问题的两个解决方案是为过滤器创建一个新的 OSGI 包并使用 ExtHTTPService 或 Whiteboard 注册它:

http://felix.apache.org/documentation/subprojects/apache-felix-http-service.html

或者

过滤掉过滤器本身中的 url。所以基本上在我的过滤器中添加对指定路径的检查。

IE:
  @Override
public void doFilter(ServletRequest pRequest, ServletResponse pResponse, FilterChain pChain) throws IOException, ServletException {

String path = pRequest.getContextPath();

if (path.contains("my/matching/path")
{
//my filter stuff
}
}

我很想看看这个问题是否有其他解决方案,但想分享我迄今为止所能找到的东西,希望这将有助于激发更多的想法,甚至只是帮助有同样问题的人节省一些谷歌搜索时间。

谢谢你,
布罗迪

最佳答案

@Tomek Rękawek::: 这不是真的....您可以将过滤器映射到路径。 我已经使用以下方式完成了,请参阅下面的代码。

@SlingFilter(order=1)
@Properties({
@Property(name="service.pid", value="com.videojet.hiresite.filters.AddNewUserFilter",propertyPrivate=false),
@Property(name="service.description",value="Authentication Filter", propertyPrivate=false),
@Property(name="service.vendor",value="Zensar Tech", propertyPrivate=false),
@Property(name="pattern",value="/services/videojet/v1/AddNewUserController/view", propertyPrivate=false)
})
public class AddNewUserFilter implements javax.servlet.Filter{

private final Logger log = LoggerFactory.getLogger(this.getClass());
public void destroy() {
// TODO Auto-generated method stub

}
......

属性“模式”将过滤器映射到 URL。
并且不要忘记使用 @SlingFilter
在模式属性中,您当然也可以使用正则表达式“/.*”,无论它是什么。 这是久经考验的代码。

也不需要在 bundle activator 或 ExtHttpSevice 中注册它。

关于osgi - Cq5.5 将 servlet 过滤器应用于特定路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com