Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
dba9c902
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
dba9c902
编写于
3月 19, 2019
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Ordered WebMvcConfigurer interceptor registrations
Closes gh-22434
上级
58b17bff
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
70 addition
and
6 deletion
+70
-6
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/InterceptorRegistration.java
...eb/servlet/config/annotation/InterceptorRegistration.java
+22
-1
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/InterceptorRegistry.java
...rk/web/servlet/config/annotation/InterceptorRegistry.java
+21
-4
spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/InterceptorRegistryTests.java
...b/servlet/config/annotation/InterceptorRegistryTests.java
+27
-1
未找到文件。
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/InterceptorRegistration.java
浏览文件 @
dba9c902
/*
* Copyright 2002-201
8
the original author or authors.
* Copyright 2002-201
9
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import
java.util.Arrays
;
import
java.util.List
;
import
org.springframework.core.Ordered
;
import
org.springframework.util.Assert
;
import
org.springframework.util.PathMatcher
;
import
org.springframework.util.StringUtils
;
...
...
@@ -43,6 +44,8 @@ public class InterceptorRegistration {
private
PathMatcher
pathMatcher
;
private
int
order
=
0
;
/**
* Create an {@link InterceptorRegistration} instance.
...
...
@@ -80,6 +83,15 @@ public class InterceptorRegistration {
return
this
;
}
/**
* Specify an order position to be used. Default is 0.
* @since 4.23
*/
public
InterceptorRegistration
order
(
int
order
){
this
.
order
=
order
;
return
this
;
}
/**
* Build the underlying interceptor. If URL patterns are provided, the returned
* type is {@link MappedInterceptor}; otherwise {@link HandlerInterceptor}.
...
...
@@ -98,4 +110,13 @@ public class InterceptorRegistration {
return
mappedInterceptor
;
}
Ordered
toOrdered
()
{
return
new
Ordered
()
{
@Override
public
int
getOrder
()
{
return
order
;
}
};
}
}
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/InterceptorRegistry.java
浏览文件 @
dba9c902
/*
* Copyright 2002-201
7
the original author or authors.
* Copyright 2002-201
9
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -17,8 +17,11 @@
package
org.springframework.web.servlet.config.annotation
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.List
;
import
org.springframework.core.OrderComparator
;
import
org.springframework.web.context.request.WebRequestInterceptor
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter
;
...
...
@@ -64,11 +67,25 @@ public class InterceptorRegistry {
* Return all registered interceptors.
*/
protected
List
<
Object
>
getInterceptors
()
{
List
<
Object
>
interceptors
=
new
ArrayList
<
Object
>(
this
.
registrations
.
size
());
Collections
.
sort
(
this
.
registrations
,
INTERCEPTOR_ORDER_COMPARATOR
);
List
<
Object
>
result
=
new
ArrayList
<
Object
>(
this
.
registrations
.
size
());
for
(
InterceptorRegistration
registration
:
this
.
registrations
)
{
interceptors
.
add
(
registration
.
getInterceptor
());
result
.
add
(
registration
.
getInterceptor
());
}
return
interceptors
;
return
result
;
}
private
static
final
Comparator
<
Object
>
INTERCEPTOR_ORDER_COMPARATOR
=
OrderComparator
.
INSTANCE
.
withSourceProvider
(
new
OrderComparator
.
OrderSourceProvider
()
{
@Override
public
Object
getOrderSource
(
final
Object
object
)
{
if
(
object
instanceof
InterceptorRegistration
)
{
return
((
InterceptorRegistration
)
object
).
toOrdered
();
}
return
null
;
}
});
}
spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/InterceptorRegistryTests.java
浏览文件 @
dba9c902
/*
* Copyright 2002-201
4
the original author or authors.
* Copyright 2002-201
9
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -25,6 +25,7 @@ import org.junit.Before;
import
org.junit.Test
;
import
org.mockito.Mockito
;
import
org.springframework.core.Ordered
;
import
org.springframework.mock.web.test.MockHttpServletRequest
;
import
org.springframework.mock.web.test.MockHttpServletResponse
;
import
org.springframework.ui.ModelMap
;
...
...
@@ -150,6 +151,30 @@ public class InterceptorRegistryTests {
assertEquals
(
Collections
.
emptyList
(),
getInterceptorsForPath
(
"/path1/secret"
));
}
@Test
public
void
orderedInterceptors
()
{
this
.
registry
.
addInterceptor
(
this
.
interceptor1
).
order
(
Ordered
.
LOWEST_PRECEDENCE
);
this
.
registry
.
addInterceptor
(
this
.
interceptor2
).
order
(
Ordered
.
HIGHEST_PRECEDENCE
);
List
<
Object
>
interceptors
=
this
.
registry
.
getInterceptors
();
assertEquals
(
2
,
interceptors
.
size
());
assertSame
(
this
.
interceptor2
,
interceptors
.
get
(
0
));
assertSame
(
this
.
interceptor1
,
interceptors
.
get
(
1
));
}
@Test
public
void
nonOrderedInterceptors
()
{
this
.
registry
.
addInterceptor
(
this
.
interceptor1
).
order
(
0
);
this
.
registry
.
addInterceptor
(
this
.
interceptor2
).
order
(
0
);
List
<
Object
>
interceptors
=
this
.
registry
.
getInterceptors
();
assertEquals
(
2
,
interceptors
.
size
());
assertSame
(
this
.
interceptor1
,
interceptors
.
get
(
0
));
assertSame
(
this
.
interceptor2
,
interceptors
.
get
(
1
));
}
private
List
<
HandlerInterceptor
>
getInterceptorsForPath
(
String
lookupPath
)
{
PathMatcher
pathMatcher
=
new
AntPathMatcher
();
...
...
@@ -177,6 +202,7 @@ public class InterceptorRegistryTests {
assertTrue
(
webInterceptor
.
preHandleInvoked
);
}
private
static
class
TestWebRequestInterceptor
implements
WebRequestInterceptor
{
private
boolean
preHandleInvoked
=
false
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录