afBedSheet文档说“过滤器可用于解决诸如授权之类的交叉问题。” 并显示此代码段:
@Contribute { serviceType=HttpPipeline# }
static Void contributeHttpPipeline(OrderedConfig conf, AuthFilter myAuthFilter) {
conf.addOrdered("AuthFilter", myAuthFilter, ["after: BedSheetFilters"])
}
我正在尝试实现一个 AuthFilter(现在是一个假人,但要演变成一个真正的 AuthFilter),但我无法让它工作:
using afBedSheet
const mixin AuthFilter : HttpPipelineFilter { }
internal const class AuthFilterImpl : AuthFilter {
internal new make(|This|in) { in(this) }
override Bool service(HttpPipeline handler) {
echo("Dummy AuthFilter invoked!")
return handler.service
}
}
我可以成功构建项目,但是当我运行它并调用任何 HTTP 服务时,我会收到以下错误。我相信我必须将我的 AuthFilter 声明或注释为afIoc服务,但不知道在哪里或如何。谁能告诉我怎么做,好吗?
线程局部变量:
ThreadStash.01.BedSheetModule.0017.perThreadState:fan.afIoc.ModuleServices@1ab5e0b
ThreadStash.01.HttpRequest.0001.headers:fan.afBedSheet.HttpRequestHeaders@1ab6087
afIoc::ThreadStash.counter: 13
web.req: fan.wisp.WispReq@4e62cc
web.res: fan.wisp.WispRes@387bc2
网络会话:060f9951-41f1-e500-0fc2-0019b971d079
[05:27:18 05-Nov-13] [err] [web] 内部错误处理:/info
afIoc::IocErr:没有依赖匹配类型 mt::AuthFilter。
Ioc 操作跟踪:
[1] 通过类型 'afBedSheet::HttpPipeline' 定位依赖
[2] 创建真正的服务 'HttpPipeline'
[3] 通过构建器方法“afBedSheet::BedSheetModule.buildHttpPipeline”创建服务“HttpPipeline”
[ 4] 确定 afBedSheet::HttpPipeline buildHttpPipeline(afBedSheet::HttpPipelineFilter[] filters, afIoc::PipelineBuilder bob, afIoc::Registry reg) 的注入参数
[ 5] 寻找 afBedSheet::HttpPipelineFilter[] 类型的依赖
[6] 收集 afBedSheet::HttpPipelineFilter[] 类型的 ORDERED 配置
[ 7] 确定 sys::Void 的注入参数
我的身份验证过滤器)
[ 8] 寻找 mt::AuthFilter 类型的依赖
堆栈跟踪:
afIoc::Utils.stackTraceFilter (Utils.fan:63)
afIoc::RegistryImpl.dependencyByType (RegistryImpl.fan:243)
afBedSheet::BedSheetWebMod.onService (BedSheetWebMod.fan:34)
wisp::WispActor.doService (WispActor.fan:197)
wisp::WispActor.process (WispActor.fan:78)
wisp::WispActor.receive (WispActor.fan:48)
并发::Actor._dispatch (Actor.java:228)
并发::Actor._work (Actor.java:199)
并发::ThreadPool$Worker.run (ThreadPool.java:255)