Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
fa4ba2a8
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 搜索 >>
提交
fa4ba2a8
编写于
10月 14, 2014
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polish resource handling tests
上级
859e1e80
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
193 addition
and
252 deletion
+193
-252
spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerSupport.java
...work/web/servlet/resource/ResourceTransformerSupport.java
+5
-5
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/CssLinkResourceTransformerTests.java
...web/servlet/resource/CssLinkResourceTransformerTests.java
+17
-25
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java
...web/servlet/resource/ResourceHttpRequestHandlerTests.java
+106
-123
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceTransformerSupportTests.java
...web/servlet/resource/ResourceTransformerSupportTests.java
+33
-65
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderJavaConfigTests.java
.../servlet/resource/ResourceUrlProviderJavaConfigTests.java
+32
-34
未找到文件。
spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerSupport.java
浏览文件 @
fa4ba2a8
...
...
@@ -76,15 +76,15 @@ public abstract class ResourceTransformerSupport implements ResourceTransformer
protected
String
resolveUrlPath
(
String
resourcePath
,
HttpServletRequest
request
,
Resource
resource
,
ResourceTransformerChain
transformerChain
)
{
if
(!
resourcePath
.
startsWith
(
"/"
))
{
// try resolving as relative path
return
transformerChain
.
getResolverChain
().
resolveUrlPath
(
resourcePath
,
Arrays
.
asList
(
resource
));
}
else
{
if
(
resourcePath
.
startsWith
(
"/"
))
{
// full resource path
ResourceUrlProvider
urlProvider
=
findResourceUrlProvider
(
request
);
return
(
urlProvider
!=
null
?
urlProvider
.
getForRequestUrl
(
request
,
resourcePath
)
:
null
);
}
else
{
// try resolving as relative path
return
transformerChain
.
getResolverChain
().
resolveUrlPath
(
resourcePath
,
Arrays
.
asList
(
resource
));
}
}
private
ResourceUrlProvider
findResourceUrlProvider
(
HttpServletRequest
request
)
{
...
...
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/CssLinkResourceTransformerTests.java
浏览文件 @
fa4ba2a8
...
...
@@ -16,11 +16,9 @@
package
org.springframework.web.servlet.resource
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.
HashMap
;
import
java.util.
Collections
;
import
java.util.List
;
import
java.util.Map
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -49,36 +47,23 @@ public class CssLinkResourceTransformerTests {
@Before
public
void
setUp
()
{
Map
<
String
,
VersionStrategy
>
versionStrategyMap
=
new
HashMap
<>();
versionStrategyMap
.
put
(
"/**"
,
new
ContentVersionStrategy
());
VersionResourceResolver
versionResolver
=
new
VersionResourceResolver
();
versionResolver
.
setStrategyMap
(
versionStrategyMap
);
List
<
ResourceResolver
>
resolvers
=
new
ArrayList
<
ResourceResolver
>();
resolvers
.
add
(
versionResolver
);
resolvers
.
add
(
new
PathResourceResolver
());
ResourceResolverChain
resolverChain
=
new
DefaultResourceResolverChain
(
resolvers
);
VersionResourceResolver
resolver
=
new
VersionResourceResolver
();
resolver
.
setStrategyMap
(
Collections
.
singletonMap
(
"/**"
,
new
ContentVersionStrategy
()));
List
<
ResourceResolver
>
resolvers
=
Arrays
.
asList
(
resolver
,
new
PathResourceResolver
());
List
<
ResourceTransformer
>
transformers
=
Arrays
.
asList
(
new
CssLinkResourceTransformer
());
List
<
ResourceTransformer
>
transformers
=
new
ArrayList
<>();
transformers
.
add
(
new
CssLinkResourceTransformer
());
ResourceResolverChain
resolverChain
=
new
DefaultResourceResolverChain
(
resolvers
);
this
.
transformerChain
=
new
DefaultResourceTransformerChain
(
resolverChain
,
transformers
);
this
.
request
=
new
MockHttpServletRequest
();
}
@Test
public
void
transformNotCss
()
throws
Exception
{
Resource
expected
=
new
ClassPathResource
(
"test/images/image.png"
,
getClass
());
Resource
actual
=
this
.
transformerChain
.
transform
(
this
.
request
,
expected
);
assertSame
(
expected
,
actual
);
}
@Test
public
void
transform
()
throws
Exception
{
Resource
mainCss
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
Resource
resource
=
this
.
transformerChain
.
transform
(
this
.
request
,
mainCss
);
TransformedResource
transformedResource
=
(
TransformedResource
)
resource
;
Resource
css
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
TransformedResource
actual
=
(
TransformedResource
)
this
.
transformerChain
.
transform
(
this
.
request
,
css
);
String
expected
=
"\n"
+
"@import url(\"bar-11e16cf79faee7ac698c805cf28248d2.css\");\n"
+
...
...
@@ -88,7 +73,7 @@ public class CssLinkResourceTransformerTests {
"@import 'foo-e36d2e05253c6c7085a91522ce43a0b4.css';\n\n"
+
"body { background: url(\"images/image-f448cd1d5dba82b774f3202c878230b3.png\") }\n"
;
String
result
=
new
String
(
transformedResource
.
getByteArray
(),
"UTF-8"
);
String
result
=
new
String
(
actual
.
getByteArray
(),
"UTF-8"
);
result
=
StringUtils
.
deleteAny
(
result
,
"\r"
);
assertEquals
(
expected
,
result
);
}
...
...
@@ -122,4 +107,11 @@ public class CssLinkResourceTransformerTests {
.
resolveUrlPath
(
"file:///home/spring/image.png"
,
Arrays
.
asList
(
externalCss
));
}
@Test
public
void
transformWithNonCssResource
()
throws
Exception
{
Resource
expected
=
new
ClassPathResource
(
"test/images/image.png"
,
getClass
());
Resource
actual
=
this
.
transformerChain
.
transform
(
this
.
request
,
expected
);
assertSame
(
expected
,
actual
);
}
}
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java
浏览文件 @
fa4ba2a8
/*
* Copyright 2002-201
2
the original author or authors.
* Copyright 2002-201
4
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.
...
...
@@ -16,6 +16,7 @@
package
org.springframework.web.servlet.resource
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
...
...
@@ -35,189 +36,171 @@ import org.springframework.web.servlet.HandlerMapping;
import
static
org
.
junit
.
Assert
.*;
/**
* Unit tests for ResourceHttpRequestHandler.
*
* @author Keith Donald
* @author Jeremy Grelle
* @author Rossen Stoyanchev
*/
public
class
ResourceHttpRequestHandlerTests
{
private
ResourceHttpRequestHandler
handler
;
private
MockHttpServletRequest
request
;
private
MockHttpServletResponse
response
;
@Before
public
void
setUp
()
throws
Exception
{
List
<
Resource
>
resourcePaths
=
new
ArrayList
<
Resource
>();
resourcePaths
.
add
(
new
ClassPathResource
(
"test/"
,
getClass
()));
resourcePaths
.
add
(
new
ClassPathResource
(
"testalternatepath/"
,
getClass
()));
handler
=
new
ResourceHttpRequestHandler
();
handler
.
setLocations
(
resourcePaths
);
handler
.
setCacheSeconds
(
3600
);
handler
.
setServletContext
(
new
TestServletContext
());
handler
.
afterPropertiesSet
();
List
<
Resource
>
paths
=
new
ArrayList
<>(
2
);
paths
.
add
(
new
ClassPathResource
(
"test/"
,
getClass
()));
paths
.
add
(
new
ClassPathResource
(
"testalternatepath/"
,
getClass
()));
this
.
handler
=
new
ResourceHttpRequestHandler
();
this
.
handler
.
setLocations
(
paths
);
this
.
handler
.
setCacheSeconds
(
3600
);
this
.
handler
.
setServletContext
(
new
TestServletContext
());
this
.
handler
.
afterPropertiesSet
();
this
.
request
=
new
MockHttpServletRequest
(
"GET"
,
""
);
this
.
response
=
new
MockHttpServletResponse
();
}
@Test
public
void
getResource
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
"text/css"
,
response
.
getContentType
());
assertEquals
(
17
,
response
.
getContentLength
());
assertTrue
(
Long
.
valueOf
(
response
.
getHeader
(
"Expires"
))
>=
System
.
currentTimeMillis
()
-
1000
+
(
3600
*
1000
));
assertEquals
(
"max-age=3600, must-revalidate"
,
response
.
getHeader
(
"Cache-Control"
));
assertTrue
(
response
.
containsHeader
(
"Last-Modified"
));
assertEquals
(
Long
.
valueOf
(
response
.
getHeader
(
"Last-Modified"
)).
longValue
(),
new
ClassPathResource
(
"test/foo.css"
,
getClass
()).
getFile
().
lastModified
());
assertEquals
(
"h1 { color:red; }"
,
response
.
getContentAsString
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
"text/css"
,
this
.
response
.
getContentType
());
assertEquals
(
17
,
this
.
response
.
getContentLength
());
assertTrue
(
headerAsLong
(
"Expires"
)
>=
System
.
currentTimeMillis
()
-
1000
+
(
3600
*
1000
));
assertEquals
(
"max-age=3600, must-revalidate"
,
this
.
response
.
getHeader
(
"Cache-Control"
));
assertTrue
(
this
.
response
.
containsHeader
(
"Last-Modified"
));
assertEquals
(
headerAsLong
(
"Last-Modified"
),
resourceLastModified
(
"test/foo.css"
));
assertEquals
(
"h1 { color:red; }"
,
this
.
response
.
getContentAsString
());
}
@Test
public
void
getResourceWithHtmlMediaType
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.html"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
"text/html"
,
response
.
getContentType
());
assertTrue
(
Long
.
valueOf
(
response
.
getHeader
(
"Expires"
))
>=
System
.
currentTimeMillis
()
-
1000
+
(
3600
*
1000
));
assertEquals
(
"max-age=3600, must-revalidate"
,
response
.
getHeader
(
"Cache-Control"
));
assertTrue
(
response
.
containsHeader
(
"Last-Modified"
));
assertEquals
(
Long
.
valueOf
(
response
.
getHeader
(
"Last-Modified"
)).
longValue
(),
new
ClassPathResource
(
"test/foo.html"
,
getClass
()).
getFile
().
lastModified
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.html"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
"text/html"
,
this
.
response
.
getContentType
());
assertTrue
(
headerAsLong
(
"Expires"
)
>=
System
.
currentTimeMillis
()
-
1000
+
(
3600
*
1000
));
assertEquals
(
"max-age=3600, must-revalidate"
,
this
.
response
.
getHeader
(
"Cache-Control"
));
assertTrue
(
this
.
response
.
containsHeader
(
"Last-Modified"
));
assertEquals
(
headerAsLong
(
"Last-Modified"
),
resourceLastModified
(
"test/foo.html"
));
}
@Test
public
void
getResourceFromAlternatePath
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/baz.css"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
"text/css"
,
response
.
getContentType
());
assertEquals
(
17
,
response
.
getContentLength
());
assertTrue
(
Long
.
valueOf
(
response
.
getHeader
(
"Expires"
))
>=
System
.
currentTimeMillis
()
-
1000
+
(
3600
*
1000
));
assertEquals
(
"max-age=3600, must-revalidate"
,
response
.
getHeader
(
"Cache-Control"
));
assertTrue
(
response
.
containsHeader
(
"Last-Modified"
));
assertEquals
(
Long
.
valueOf
(
response
.
getHeader
(
"Last-Modified"
)).
longValue
(),
new
ClassPathResource
(
"testalternatepath/baz.css"
,
getClass
()).
getFile
().
lastModified
());
assertEquals
(
"h1 { color:red; }"
,
response
.
getContentAsString
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/baz.css"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
"text/css"
,
this
.
response
.
getContentType
());
assertEquals
(
17
,
this
.
response
.
getContentLength
());
assertTrue
(
headerAsLong
(
"Expires"
)
>=
System
.
currentTimeMillis
()
-
1000
+
(
3600
*
1000
));
assertEquals
(
"max-age=3600, must-revalidate"
,
this
.
response
.
getHeader
(
"Cache-Control"
));
assertTrue
(
this
.
response
.
containsHeader
(
"Last-Modified"
));
assertEquals
(
headerAsLong
(
"Last-Modified"
),
resourceLastModified
(
"testalternatepath/baz.css"
));
assertEquals
(
"h1 { color:red; }"
,
this
.
response
.
getContentAsString
());
}
@Test
public
void
getResourceFromSubDirectory
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/js/foo.js"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
"text/javascript"
,
response
.
getContentType
());
assertEquals
(
"function foo() { console.log(\"hello world\"); }"
,
response
.
getContentAsString
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/js/foo.js"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
"text/javascript"
,
this
.
response
.
getContentType
());
assertEquals
(
"function foo() { console.log(\"hello world\"); }"
,
this
.
response
.
getContentAsString
());
}
@Test
public
void
getResourceFromSubDirectoryOfAlternatePath
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/js/baz.js"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
"text/javascript"
,
response
.
getContentType
());
assertEquals
(
"function foo() { console.log(\"hello world\"); }"
,
response
.
getContentAsString
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/js/baz.js"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
"text/javascript"
,
this
.
response
.
getContentType
());
assertEquals
(
"function foo() { console.log(\"hello world\"); }"
,
this
.
response
.
getContentAsString
());
}
@Test
public
void
getResourceViaDirectoryTraversal
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setMethod
(
"GET"
);
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"../testsecret/secret.txt"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
404
,
response
.
getStatus
());
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"test/../../testsecret/secret.txt"
);
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
404
,
response
.
getStatus
());
handler
.
setLocations
(
Arrays
.<
Resource
>
asList
(
new
ClassPathResource
(
"testsecret/"
,
getClass
())));
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"secret.txt"
);
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
200
,
response
.
getStatus
());
assertEquals
(
"text/plain"
,
response
.
getContentType
());
assertEquals
(
"big secret"
,
response
.
getContentAsString
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"../testsecret/secret.txt"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
404
,
this
.
response
.
getStatus
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"test/../../testsecret/secret.txt"
);
this
.
response
=
new
MockHttpServletResponse
();
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
404
,
this
.
response
.
getStatus
());
this
.
handler
.
setLocations
(
Arrays
.<
Resource
>
asList
(
new
ClassPathResource
(
"testsecret/"
,
getClass
())));
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"secret.txt"
);
this
.
response
=
new
MockHttpServletResponse
();
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
200
,
this
.
response
.
getStatus
());
assertEquals
(
"text/plain"
,
this
.
response
.
getContentType
());
assertEquals
(
"big secret"
,
this
.
response
.
getContentAsString
());
}
@Test
public
void
notModified
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
request
.
addHeader
(
"If-Modified-Since"
,
new
ClassPathResource
(
"test/foo.css"
,
getClass
()).
getFile
().
lastModified
());
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
HttpServletResponse
.
SC_NOT_MODIFIED
,
response
.
getStatus
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
this
.
request
.
addHeader
(
"If-Modified-Since"
,
resourceLastModified
(
"test/foo.css"
));
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
HttpServletResponse
.
SC_NOT_MODIFIED
,
this
.
response
.
getStatus
());
}
@Test
public
void
modified
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
request
.
addHeader
(
"If-Modified-Since"
,
new
ClassPathResource
(
"test/foo.css"
,
getClass
()).
getFile
().
lastModified
()
/
1000
*
1000
-
1
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
HttpServletResponse
.
SC_OK
,
response
.
getStatus
());
assertEquals
(
"h1 { color:red; }"
,
response
.
getContentAsString
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
this
.
request
.
addHeader
(
"If-Modified-Since"
,
resourceLastModified
(
"test/foo.css"
)
/
1000
*
1000
-
1
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
HttpServletResponse
.
SC_OK
,
this
.
response
.
getStatus
());
assertEquals
(
"h1 { color:red; }"
,
this
.
response
.
getContentAsString
());
}
@Test
public
void
directory
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/js/"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
404
,
response
.
getStatus
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/js/"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
404
,
this
.
response
.
getStatus
());
}
@Test
public
void
missingResourcePath
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
""
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
404
,
response
.
getStatus
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
""
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
404
,
this
.
response
.
getStatus
());
}
@Test
(
expected
=
IllegalStateException
.
class
)
public
void
noPathWithinHandlerMappingAttribute
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
}
@Test
(
expected
=
HttpRequestMethodNotSupportedException
.
class
)
public
void
unsupportedHttpMethod
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
request
.
setMethod
(
"POST"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/foo.css"
);
this
.
request
.
setMethod
(
"POST"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
}
@Test
public
void
resourceNotFound
()
throws
Exception
{
MockHttpServletRequest
request
=
new
MockHttpServletRequest
();
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/not-there.css"
);
request
.
setMethod
(
"GET"
);
MockHttpServletResponse
response
=
new
MockHttpServletResponse
();
handler
.
handleRequest
(
request
,
response
);
assertEquals
(
404
,
response
.
getStatus
());
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/not-there.css"
);
this
.
handler
.
handleRequest
(
this
.
request
,
this
.
response
);
assertEquals
(
404
,
this
.
response
.
getStatus
());
}
private
long
headerAsLong
(
String
responseHeaderName
)
{
return
Long
.
valueOf
(
this
.
response
.
getHeader
(
responseHeaderName
));
}
private
long
resourceLastModified
(
String
resourceName
)
throws
IOException
{
return
new
ClassPathResource
(
resourceName
,
getClass
()).
getFile
().
lastModified
();
}
...
...
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceTransformerSupportTests.java
浏览文件 @
fa4ba2a8
...
...
@@ -17,7 +17,7 @@ package org.springframework.web.servlet.resource;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
java.util.Array
List
;
import
java.util.Array
s
;
import
java.util.Collections
;
import
java.util.List
;
...
...
@@ -48,93 +48,61 @@ public class ResourceTransformerSupportTests {
@Before
public
void
setUp
()
{
VersionResourceResolver
versionResolver
=
new
VersionResourceResolver
();
versionResolver
.
setStrategyMap
(
Collections
.
singletonMap
(
"/**"
,
new
ContentVersionStrategy
()));
List
<
ResourceResolver
>
resolvers
=
new
ArrayList
<>();
resolvers
.
add
(
versionResolver
);
resolvers
.
add
(
new
PathResourceResolver
());
VersionResourceResolver
resolver
=
new
VersionResourceResolver
();
resolver
.
setStrategyMap
(
Collections
.
singletonMap
(
"/**"
,
new
ContentVersionStrategy
()));
List
<
ResourceResolver
>
resolvers
=
Arrays
.
asList
(
resolver
,
new
PathResourceResolver
());
this
.
transformerChain
=
new
DefaultResourceTransformerChain
(
new
DefaultResourceResolverChain
(
resolvers
),
null
);
List
<
Resource
>
locations
=
new
ArrayList
<>();
locations
.
add
(
new
ClassPathResource
(
"test/"
,
getClass
()));
this
.
transformer
=
new
TestResourceTransformerSupport
();
this
.
transformer
.
setResourceUrlProvider
(
createResourceUrlProvider
(
resolvers
));
this
.
request
=
new
MockHttpServletRequest
(
"GET"
,
""
);
}
protected
ResourceUrlProvider
createResourceUrlProvider
(
List
<
ResourceResolver
>
resolvers
)
{
ResourceHttpRequestHandler
handler
=
new
ResourceHttpRequestHandler
();
handler
.
setLocations
(
locations
);
handler
.
setLocations
(
Arrays
.
asList
(
new
ClassPathResource
(
"test/"
,
getClass
()))
);
handler
.
setResourceResolvers
(
resolvers
);
ResourceUrlProvider
urlProvider
=
new
ResourceUrlProvider
();
urlProvider
.
setHandlerMap
(
Collections
.
singletonMap
(
"/resources/**"
,
handler
));
this
.
transformer
=
new
TestResourceTransformerSupport
();
this
.
transformer
.
setResourceUrlProvider
(
urlProvider
);
this
.
request
=
new
MockHttpServletRequest
();
return
urlProvider
;
}
@Test
public
void
rewriteAbsolutePathWithContext
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/servlet/context/resources/main.css"
);
this
.
request
.
setMethod
(
"GET"
);
this
.
request
.
setServletPath
(
"/servlet"
);
this
.
request
.
setContextPath
(
"/context"
);
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/resources/main.css"
);
String
resourcePath
=
"/servlet/context/resources/bar.css"
;
Resource
mainCss
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
String
actual
=
this
.
transformer
.
resolveUrlPath
(
resourcePath
,
this
.
request
,
mainCss
,
this
.
transformerChain
);
assertEquals
(
"/servlet/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
}
@Test
public
void
rewriteAbsolutePath
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/resources/main.css"
);
this
.
request
.
setMethod
(
"GET"
);
public
void
resolveUrlPath
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/context/servlet/resources/main.css"
);
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/resources/main.css"
);
String
resourcePath
=
"/resources/bar.css"
;
Resource
mainCss
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
String
actual
=
this
.
transformer
.
resolveUrlPath
(
resourcePath
,
this
.
request
,
mainCss
,
this
.
transformerChain
);
assertEquals
(
"/resources/bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
actual
=
this
.
transformer
.
resolveUrlPath
(
"bar.css"
,
this
.
request
,
mainCss
,
this
.
transformerChain
);
assertEquals
(
"bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
String
resourcePath
=
"/context/servlet/resources/bar.css"
;
Resource
css
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
String
actual
=
this
.
transformer
.
resolveUrlPath
(
resourcePath
,
this
.
request
,
css
,
this
.
transformerChain
);
assertEquals
(
"/context/servlet/resources/bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
}
@Test
public
void
rewriteRelativePath
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/servlet/context/resources/main.css"
);
this
.
request
.
setMethod
(
"GET"
);
this
.
request
.
setServletPath
(
"/servlet"
);
public
void
resolveUrlPathWithoutHandlerMappingAttribute
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/context/servlet/resources/main.css"
);
this
.
request
.
setContextPath
(
"/context"
);
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/resources/main.css"
);
Resource
mainCss
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
String
actual
=
this
.
transformer
.
resolveUrlPath
(
"bar.css"
,
this
.
request
,
mainCss
,
this
.
transformerChain
);
assertEquals
(
"bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
}
@Test
(
expected
=
IllegalStateException
.
class
)
public
void
rewriteAbsolutePathWrongPath
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/servlet/context/resources/main.css"
);
this
.
request
.
setMethod
(
"GET"
);
this
.
request
.
setServletPath
(
"/servlet"
);
this
.
request
.
setContextPath
(
"/context"
);
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/wrong/main.css"
);
String
resourcePath
=
"/servlet/context/resources/bar.css"
;
Resource
mainCss
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
this
.
transformer
.
resolveUrlPath
(
resourcePath
,
this
.
request
,
mainCss
,
this
.
transformerChain
);
String
resourcePath
=
"/context/servlet/resources/bar.css"
;
Resource
css
=
new
ClassPathResource
(
"test/main.css"
,
getClass
());
String
actual
=
this
.
transformer
.
resolveUrlPath
(
resourcePath
,
this
.
request
,
css
,
this
.
transformerChain
);
assertEquals
(
"/context/servlet/resources/bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
}
@Test
public
void
re
writeRelativePathUpperLevel
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/
servlet/context/resources/images/image.png
"
);
this
.
request
.
setMethod
(
"GET"
);
this
.
request
.
setServletPath
(
"/servlet"
);
this
.
request
.
setContextPath
(
"/context"
);
this
.
request
.
setAttribute
(
HandlerMapping
.
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
,
"/resources/images/image.png"
);
public
void
re
solveUrlPathWithRelativePath
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/
context/servlet/resources/main.css
"
);
Resource
css
=
new
ClassPathResource
(
"test/main.css"
,
getClass
()
);
String
actual
=
this
.
transformer
.
resolveUrlPath
(
"bar.css"
,
this
.
request
,
css
,
this
.
transformerChain
);
assertEquals
(
"bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
}
@Test
public
void
resolveUrlPathWithRelativePathInParentDirectory
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/context/servlet/resources/images/image.png"
);
Resource
imagePng
=
new
ClassPathResource
(
"test/images/image.png"
,
getClass
());
String
actual
=
this
.
transformer
.
resolveUrlPath
(
"../bar.css"
,
this
.
request
,
imagePng
,
this
.
transformerChain
);
assertEquals
(
"../bar-11e16cf79faee7ac698c805cf28248d2.css"
,
actual
);
...
...
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderJavaConfigTests.java
浏览文件 @
fa4ba2a8
...
...
@@ -47,68 +47,66 @@ public class ResourceUrlProviderJavaConfigTests {
private
MockHttpServletRequest
request
;
private
MockHttpServletResponse
response
;
@Before
@SuppressWarnings
(
"resource"
)
public
void
setup
()
throws
Exception
{
this
.
filterChain
=
new
MockFilterChain
(
this
.
servlet
,
new
ResourceUrlEncodingFilter
());
AnnotationConfigWebApplicationContext
ctx
=
new
AnnotationConfigWebApplicationContext
();
ctx
.
setServletContext
(
new
MockServletContext
());
ctx
.
register
(
WebConfig
.
class
);
ctx
.
refresh
();
ResourceUrlProvider
urlProvider
=
ctx
.
getBean
(
ResourceUrlProvider
.
class
);
AnnotationConfigWebApplicationContext
context
=
new
AnnotationConfigWebApplicationContext
();
context
.
setServletContext
(
new
MockServletContext
());
context
.
register
(
WebConfig
.
class
);
context
.
refresh
();
this
.
request
=
new
MockHttpServletRequest
(
"GET"
,
"/"
);
request
.
setAttribute
(
ResourceUrlProviderExposingInterceptor
.
RESOURCE_URL_PROVIDER_ATTR
,
urlProvider
);
this
.
request
.
setContextPath
(
"/myapp"
);
this
.
response
=
new
MockHttpServletResponse
();
Object
urlProvider
=
context
.
getBean
(
ResourceUrlProvider
.
class
);
this
.
request
.
setAttribute
(
ResourceUrlProviderExposingInterceptor
.
RESOURCE_URL_PROVIDER_ATTR
,
urlProvider
);
}
@Test
public
void
rootServletMapping
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/"
);
this
.
request
.
setMethod
(
"GET"
);
this
.
request
.
setRequestURI
(
"/myapp/index.html"
);
this
.
request
.
setContextPath
(
"/myapp"
);
this
.
request
.
setServletPath
(
"/index.html"
);
this
.
filterChain
.
doFilter
(
request
,
new
MockHttpServletResponse
());
public
void
resolvePathWithRootServletMapping
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/myapp/index"
);
this
.
request
.
setServletPath
(
"/index"
);
this
.
filterChain
.
doFilter
(
this
.
request
,
this
.
response
);
String
actual
=
this
.
servlet
.
response
.
encodeURL
(
"/myapp/resources/foo.css"
);
assertEquals
(
"/myapp/resources/foo-e36d2e05253c6c7085a91522ce43a0b4.css"
,
actual
);
assertEquals
(
"/myapp/resources/foo-e36d2e05253c6c7085a91522ce43a0b4.css"
,
resolvePublicResourceUrlPath
(
"/myapp/resources/foo.css"
)
);
}
@Test
public
void
prefixServletMapping
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/myapp/myservlet/index.html"
);
this
.
request
.
setContextPath
(
"/myapp"
);
public
void
resolvePathWithPrefixServletMapping
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/myapp/myservlet/index"
);
this
.
request
.
setServletPath
(
"/myservlet"
);
this
.
filterChain
.
doFilter
(
request
,
new
MockHttpServletResponse
()
);
this
.
filterChain
.
doFilter
(
this
.
request
,
this
.
response
);
String
actual
=
this
.
servlet
.
response
.
encodeURL
(
"/myapp/myservlet/resources/foo.css"
);
assertEquals
(
"/myapp/myservlet/resources/foo-e36d2e05253c6c7085a91522ce43a0b4.css"
,
actual
);
assertEquals
(
"/myapp/myservlet/resources/foo-e36d2e05253c6c7085a91522ce43a0b4.css"
,
resolvePublicResourceUrlPath
(
"/myapp/myservlet/resources/foo.css"
)
);
}
@Test
public
void
extensionServletMapping
()
throws
Exception
{
public
void
resolvePathWithExtensionServletMapping
()
throws
Exception
{
this
.
request
.
setRequestURI
(
"/myapp/index.html"
);
this
.
request
.
setContextPath
(
"/myapp"
);
this
.
request
.
setServletPath
(
"/index.html"
);
this
.
filterChain
.
doFilter
(
request
,
new
MockHttpServletResponse
());
this
.
filterChain
.
doFilter
(
this
.
request
,
this
.
response
);
assertEquals
(
"/myapp/resources/foo-e36d2e05253c6c7085a91522ce43a0b4.css"
,
resolvePublicResourceUrlPath
(
"/myapp/resources/foo.css"
));
}
String
actual
=
this
.
servlet
.
response
.
encodeURL
(
"/myapp/resources/foo.css"
);
assertEquals
(
"/myapp/resources/foo-e36d2e05253c6c7085a91522ce43a0b4.css"
,
actual
);
private
String
resolvePublicResourceUrlPath
(
String
path
)
{
return
this
.
servlet
.
wrappedResponse
.
encodeURL
(
path
);
}
@Configuration
static
class
WebConfig
extends
WebMvcConfigurationSupport
{
@Override
public
void
addResourceHandlers
(
ResourceHandlerRegistry
registry
)
{
registry
.
addResourceHandler
(
"/resources/**"
)
...
...
@@ -120,11 +118,11 @@ public class ResourceUrlProviderJavaConfigTests {
@SuppressWarnings
(
"serial"
)
private
static
class
TestServlet
extends
HttpServlet
{
private
HttpServletResponse
r
esponse
;
private
HttpServletResponse
wrappedR
esponse
;
@Override
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
this
.
r
esponse
=
response
;
this
.
wrappedR
esponse
=
response
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录