Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
6fcc8693
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,发现更多精彩内容 >>
提交
6fcc8693
编写于
3月 02, 2016
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polish ForwardedHeaderFilter
Issue: SPR-13614
上级
06799471
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
48 addition
and
44 deletion
+48
-44
spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java
...org/springframework/web/filter/ForwardedHeaderFilter.java
+46
-41
spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java
...pringframework/web/filter/ForwardedHeaderFilterTests.java
+2
-3
未找到文件。
spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java
浏览文件 @
6fcc8693
...
...
@@ -31,6 +31,7 @@ import javax.servlet.http.HttpServletResponse;
import
org.springframework.http.HttpRequest
;
import
org.springframework.http.server.ServletServerHttpRequest
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.util.UriComponents
;
import
org.springframework.web.util.UriComponentsBuilder
;
...
...
@@ -92,6 +93,10 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
private
static
class
ForwardedHeaderRequestWrapper
extends
HttpServletRequestWrapper
{
public
static
final
Enumeration
<
String
>
EMPTY_HEADER_VALUES
=
Collections
.
enumeration
(
Collections
.<
String
>
emptyList
());
private
final
String
scheme
;
private
final
boolean
secure
;
...
...
@@ -100,9 +105,9 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
private
final
int
port
;
private
final
String
portIn
Url
;
private
final
String
Buffer
request
Url
;
private
final
Map
<
String
,
List
<
String
>>
headers
=
new
LinkedHashMap
<
String
,
List
<
String
>>()
;
private
final
Map
<
String
,
List
<
String
>>
headers
;
public
ForwardedHeaderRequestWrapper
(
HttpServletRequest
request
)
{
...
...
@@ -116,51 +121,35 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
this
.
secure
=
"https"
.
equals
(
scheme
);
this
.
host
=
uriComponents
.
getHost
();
this
.
port
=
(
port
==
-
1
?
(
this
.
secure
?
443
:
80
)
:
port
);
this
.
portInUrl
=
(
port
==
-
1
?
""
:
":"
+
port
);
this
.
requestUrl
=
initRequestUrl
(
this
.
scheme
,
this
.
host
,
port
,
request
.
getRequestURI
());
this
.
headers
=
initHeaders
(
request
);
}
private
static
StringBuffer
initRequestUrl
(
String
scheme
,
String
host
,
int
port
,
String
path
)
{
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
scheme
).
append
(
"://"
).
append
(
host
);
sb
.
append
(
port
==
-
1
?
""
:
":"
+
port
);
sb
.
append
(
path
);
return
sb
;
}
/**
* Copy the headers excluding any {@link #FORWARDED_HEADER_NAMES}.
*/
private
static
Map
<
String
,
List
<
String
>>
initHeaders
(
HttpServletRequest
request
)
{
Map
<
String
,
List
<
String
>>
headers
=
new
LinkedHashMap
<
String
,
List
<
String
>>();
Enumeration
<
String
>
headerNames
=
request
.
getHeaderNames
();
while
(
headerNames
.
hasMoreElements
())
{
String
name
=
headerNames
.
nextElement
();
this
.
headers
.
put
(
name
,
Collections
.
list
(
request
.
getHeaders
(
name
)));
headers
.
put
(
name
,
Collections
.
list
(
request
.
getHeaders
(
name
)));
}
for
(
String
name
:
FORWARDED_HEADER_NAMES
)
{
this
.
headers
.
remove
(
name
);
headers
.
remove
(
name
);
}
return
headers
;
}
@Override
public
String
getHeader
(
String
name
)
{
Map
.
Entry
<
String
,
List
<
String
>>
header
=
getHeaderEntry
(
name
);
if
(
header
==
null
||
header
.
getValue
()
==
null
||
header
.
getValue
().
isEmpty
())
{
return
null
;
}
return
header
.
getValue
().
get
(
0
);
}
protected
Map
.
Entry
<
String
,
List
<
String
>>
getHeaderEntry
(
String
name
)
{
for
(
Map
.
Entry
<
String
,
List
<
String
>>
entry
:
this
.
headers
.
entrySet
())
{
if
(
entry
.
getKey
().
equalsIgnoreCase
(
name
))
{
return
entry
;
}
}
return
null
;
}
@Override
public
Enumeration
<
String
>
getHeaderNames
()
{
return
Collections
.
enumeration
(
this
.
headers
.
keySet
());
}
@Override
public
Enumeration
<
String
>
getHeaders
(
String
name
)
{
Map
.
Entry
<
String
,
List
<
String
>>
header
=
getHeaderEntry
(
name
);
if
(
header
==
null
||
header
.
getValue
()
==
null
)
{
return
Collections
.
enumeration
(
Collections
.<
String
>
emptyList
());
}
return
Collections
.
enumeration
(
header
.
getValue
());
}
@Override
public
String
getScheme
()
{
return
this
.
scheme
;
...
...
@@ -183,10 +172,26 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
@Override
public
StringBuffer
getRequestURL
()
{
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
this
.
scheme
).
append
(
"://"
).
append
(
this
.
host
).
append
(
this
.
portInUrl
);
sb
.
append
(
getRequestURI
());
return
sb
;
return
this
.
requestUrl
;
}
// Override header accessors in order to not expose forwarded headers
@Override
public
String
getHeader
(
String
name
)
{
List
<
String
>
value
=
this
.
headers
.
get
(
name
);
return
(
CollectionUtils
.
isEmpty
(
value
)
?
null
:
value
.
get
(
0
));
}
@Override
public
Enumeration
<
String
>
getHeaders
(
String
name
)
{
List
<
String
>
value
=
this
.
headers
.
get
(
name
);
return
(
CollectionUtils
.
isEmpty
(
value
)
?
EMPTY_HEADER_VALUES
:
Collections
.
enumeration
(
value
));
}
@Override
public
Enumeration
<
String
>
getHeaderNames
()
{
return
Collections
.
enumeration
(
this
.
headers
.
keySet
());
}
}
...
...
spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java
浏览文件 @
6fcc8693
...
...
@@ -53,7 +53,7 @@ public class ForwardedHeaderFilterTests {
}
@Test
public
void
xForwardedHeaders
()
throws
Exception
{
public
void
forwardedRequest
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setScheme
(
"http"
);
request
.
setServerName
(
"localhost"
);
...
...
@@ -65,10 +65,9 @@ public class ForwardedHeaderFilterTests {
request
.
addHeader
(
"foo"
,
"bar"
);
MockFilterChain
chain
=
new
MockFilterChain
(
new
HttpServlet
()
{});
this
.
filter
.
doFilter
(
request
,
new
MockHttpServletResponse
(),
chain
);
HttpServletRequest
actual
=
(
HttpServletRequest
)
chain
.
getRequest
();
assertEquals
(
"https://84.198.58.199/mvc-showcase"
,
actual
.
getRequestURL
().
toString
());
assertEquals
(
"https"
,
actual
.
getScheme
());
assertEquals
(
"84.198.58.199"
,
actual
.
getServerName
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录