【发布时间】:2017-12-31 02:17:00
【问题描述】:
我正在尝试在 OSGi Apache-Felix 中过滤 Jetty HTTP 服务器的 Web 资源。
我已在框架中将过滤器注册为 OSGi 组件:
@Component(property = { "osgi.http.whiteboard.filter.name=MyFilter",
"osgi.http.whiteboard.filter.regex=.*" },
scope = ServiceScope.PROTOTYPE)
public class MyFilter implements Filter {
...
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) {
...
// some logging
}
...
}
当我启动 Felix 框架并通过浏览器访问资源和 servlet 时,Filter#doFilter(...) 方法永远不会被调用。
已使用org.osgi.service.http.HttpService#registerServlet(...) 和org.osgi.service.http.HttpService#registerResources(...) 注册资源和servlet。
我确定,过滤器已初始化,因为 Filter#init(...) 被调用:
这里是组件的 Felix scr 信息:
Component Description:
Name: org.myCompany.MyFilter
Implementation Class: org.myCompany.MyFilter
Default State: enabled
Activation: delayed
Configuration Policy: optional
Activate Method: activate
Deactivate Method: deactivate
Modified Method: -
Configuration Pid: [org.myCompany.MyFilter]
Services:
javax.servlet.Filter
Service Scope: prototype
Component Description Properties:
osgi.http.whiteboard.filter.name = MyFilter
osgi.http.whiteboard.filter.regex = .*
Component Configuration:
ComponentId: 7
State: active
Component Configuration Properties:
component.id = 7
component.name = org.myCompany.MyFilter
osgi.http.whiteboard.filter.name = MyFilter
osgi.http.whiteboard.filter.regex = .*
- 资源/servlet 过滤是否在 Felix、Jetty 和 OSGi 中工作?
- 我是否正确注册了过滤器?
同时,感谢您的关注和参与。
【问题讨论】:
-
OSGi 提供基于正则表达式的过滤??这在 Servlet 规范中不受支持。顺便说一句:(正则表达式)
.*==(servlet)/*
标签: java servlets jetty osgi apache-felix