配置项
名称 | 缺省值 | 说明 |
---|---|---|
nop.web.http-server-filter.enabled | true | 是否将NopIoC中定义的IHttpServerFilter包装为Spring和Quarkus所使用的Filter |
nop.quarkus.http-server-filter.sys-order | 5 | Quarkus框架所使用的系统级IHttpServerFilter的缺省优先级,值越小优先级越高 |
nop.quarkus.http-server-filter.app-order | 10 | Quarkus框架所使用的应用级IHttpServerFilter的缺省优先级,值越小优先级越高 |
nop.spring.http-server-filter.sys-order | 0 | Spring框架所使用的系统级IHttpServerFilter的缺省优先级,值越小优先级越高 |
nop.spring.http-server-filter.app-order | 1000 | Spring框架所使用的应用级IHttpServerFilter的缺省优先级,值越小优先级越高 |
内置Filter
- ContextHttpServerFilter: 初始化全局的IContext对象。每次Web请求都产生一个新的IContext
- AuthHttpServerFilter: 负责进行登录检查。继承这个类或者替换ILoginService的实现类都可以定制登录逻辑。
AuthHttpServerFilter具有Web环境相关的知识,例如cookie等。但是ILoginService就没有Web环境的知识了,它只能通过请求消息来进行处理。
SpringSecurity集成
SpringSecurity的架构是使用唯一的一个HttpServletFilter,但是内部建立自己的FilterChain。SpringSecurity的这个Filter的order的值是Integer.MIN_VALUE+50,
所以如果想在SpringSecurity的filter之前执行代码,需要把order设置为很小的值。缺省配置下Nop平台注册的filter会在SpringSecurity的filter之后执行。
另外一种做法是在SpringSecurity的SecurityFilterChain中插入自定义的Filter,比如如下方式:
|
SpringHttpServerFilterConfiguration中创建的Nop平台的filter选择了从OncePerRequestFilter继承,因此在整个filterChain中只会执行一次。
如果在SpringSecurity的SecurityFilterChain中注册了registerSysFilter()
,则这个filter会提前执行。缺省情况下它应该是在SpringSecurity的
filter执行完毕之后才执行(因为它的order缺省为0,比SpringSecurity的order大)