2016-12-28 82 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"); 
    } 
}