2016-12-28 69 views
1

我的静态资源,我在我的应用程序增加了一个新的控制器(不休息)具有以下映射更改默认的URL映射在春季启动提供静态内容

@RequestMapping(value = "/{postId}/{postUri:.+}", method = RequestMethod.GET) 
public String viewPost(@ModelAttribute("model") ModelMap model, @PathVariable("postId") String postId,         @PathVariable("postUri") String postUri) { 

调试,我发现后立即停止工作我新添加的控制器方法开始提取静态资源,基本上它优先于静态资源的默认映射。

例如,请求到下面的静态资源达到我的控制器,而不是静态的资源处理程序。

http://localhost:7999/css/bootstrap-2a31dca112f26923b51676cb764c58d5.css

我使用弹簧启动1.4

有没有一种办法,我可以修改默认的服务静态内容映射URL,因为我不想修改我的控制器方法的网址是什么?

回答

2

当然可以。有一个spring.mvc.static-path-pattern,你可以用它来重写:

spring.mvc.static-path-pattern=/resources/** 

将映射到classpath:/static/css/foo.css/resources/css/foo.css

(我做了更清晰的a862b6d

说了这么多,我只强烈可以推荐在那里变更路径。有一个路径变量捕获根上下文是真的一个坏主意。

+0

春季安全保护静态资源,如果我们提供了'自定义值spring.mvc.static-path-pattern',是故意的吗?如果我们不覆盖弹簧引导中的静态路径模式,我们不需要在弹簧安全中提供任何排除模式。1.4 –

+0

我们不这样做。我们将通常的嫌疑犯(即子路径)列入白名单。我们不能在不产生安全漏洞的情况下自动适应。 –

0

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-static-content

默认情况下,春季启动将提供静态内容从一个名为/静在classpath或从ServletContext的根(或/公共或/资源或/ META-INF /资源)目录中。它使用Spring MVC中的ResourceHttpRequestHandler,因此您可以通过添加自己的WebMvcConfigurerAdapter并重写addResourceHandlers方法来修改该行为。

在一个独立的Web应用程序也使从容器默认的servlet,并作为后备,服务从ServletContext的根目录的内容,如果春节决定不处理它。大多数情况下,这不会发生(除非您修改默认的MVC配置),因为Spring将始终能够通过DispatcherServlet处理请求。

默认情况下,资源被映射到/ **,但是你可以调整它通过spring.mvc.static路径模式。举例来说,搬迁的所有资源/资源/ **可以实现如下:

spring.mvc.static-path-pattern=/resources/** 

也可以使用spring.resources.static-位置(用列表替换默认值,自定义静态资源位置目录位置)。如果您这样做,默认的欢迎页面检测将切换到您的自定义位置,因此如果启动时您的任何位置都有index.html,它将成为应用程序的主页。

除了“标准”静态资源之上的位置,特殊情况下为Webjars内容制作。如果在Webjars格式中打包了任何具有/ webjars/**路径的资源,它们将从jar文件中提供。

0

我使用@EnableWebMVC。这个工作对我和春天启动服务的服务器的静态内容默认 本地主机:8888 /,也为本地主机:8888 /一些/路径/

@Configuration 
public static class WebServerStaticResourceConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/some/path/").setViewName("forward:/index.html"); 
    } 
}