如何解决使用JRebel 6.0.0进行部署时,在Spring 4.1.2更新之后找不到资源
(我无法在当前的JRebel 6.1.1中重现 )-我猜 已修复(2014年12月23日)
修复了Spring ResourceHttpRequestHandler无法为webroot之外的资源提供服务的问题。
(JRebel Changeloghttps://zeroturnaround.com/software/jrebel/download/changelog/6-x/)
对于感兴趣的人如何解决它:
我只能猜测,因为这很奇怪。Spring
4.1.6(即我用于测试的版本)的类org.springframework.web.servlet.resource.PathResourceResolver
具有方法checkResource(Resource
resource, Resource location)
:
protected boolean checkResource(Resource resource, Resource location) throws IOException {
if (isResourceUnderLocation(resource, location)) {
return true;
}
if (getAllowedLocations() != null) {
for (Resource current : getAllowedLocations()) {
if (isResourceUnderLocation(resource, current)) {
return true;
}
}
}
return false;
}
第一种if
:isResourceUnderLocation...
检查请求是否正在访问已配置资源文件夹之外的资源的方法
isResourceUnderLocation(Resource resource, Resource location) {
...
resourcePath = ((ServletContextResource) resource).getPath();
locationPath = StringUtils.cleanPath(((ServletContextResource) location).getPath());
...
if (!resourcePath.startsWith(locationPath)) {
return false;
}
...
}
当我使用调试器检查JRebel处于活动状态时,发生了什么事情时,发生了一些奇怪的事情:当JVM上线时if
(isResourceUnderLocation(resource, location))
{
,该方法isResourceUnderLocation
就不会被调用!
因此,我得出的结论是,JRebel进行了一些字节码操作,以防止执行检查(以及整个isResourceUnderLocation
方法)。
解决方法
Spring 4.1.2(4.0.8和3.2.12)包含一个Security Bugfix
SPR-12354,可防止ResourceHttpRequestHandler
(后面的东西<mvc:resources>
)从资源文件夹外部加载文件。
另一方面:是JRebel(我将其与默认配置一起使用)。它似乎表明JRebel做了一些魔术,不是从wtp文件夹而是直接从“
source”文件夹加载资源。
因此,从Spring 3.2.11升级到3.2.12(以及其他类似的应用程序从4.0.7升级到4.0.8)之后,Spring
ResourceHttpRequestHandler
不再提供JRebel“维护”的资源文件。而是提供了404。原因是Spring将配置的资源文件夹的绝对文件路径与将要传递的文件的绝对文件路径进行比较。如果ResourceHttpRequestHandler
认为该文件位于已配置的资源文件夹之外,则认为用于选择该文件的URL是恶意的。因此,ResourceHttpRequestHandler
找不到与404资源的和响应。
我希望可以将JRebel配置为不“维护” js,png和css文件,但我不知道如何。这就是问题: 如何配置Spring MVC应用程序(v
4.0.8)仍提供资源的JRebelResourceHttpRequestHandler
?
(我希望几乎每个JRebel用户在升级到Spring 4.1.2、4.0.8或3.2.12后都会遇到此问题)。
(不要误会我的意思,这不是如何操作Spring而不是检查文件是否位于configures资源文件夹之外的问题。我已经查看了源代码,观察到的行为是预期的行为。由错误修复的作者撰写-
这个问题与配置JRebel有关)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。