⑴ SpringMvc CORS跨域設置
基於安全的考慮, W3C 規范規定瀏覽器禁止訪問不同域(origin)的資源,目前絕大部分瀏覽器遵循這一規范,從而衍生出了跨域資源共享 ( CORS )問題,相比於 IFRAME 或 JSONP , CORS 更全面並且更安全, Spring Mvc 為我們提供了一套多粒度的CORS解決方案。
關於 CORS 的介紹,主要參考文章 《Cross-Origin Resource Sharing (CORS)》
CORS 的工作原理是添加新的 HTTP headers 來讓伺服器描述哪些源的請求可以訪問該資源,對於可能對伺服器造成不好影響的請求,規范規定瀏覽器需要先發送「預檢」請求(也就是 OPTION 請求),在預檢請求通過後再發送實際的請求,伺服器還可以通知客戶端是否應該隨請求發送「憑據」(例如 Cookie 和 HTTP 身份驗證),更詳細的介紹可以參考上面的文章,本文主要討論 Spring Mvc 對 CORS 的支持。
需要注意的是:
不需要發送」預檢「請求
可以看見 @CrossOrigin 註解可以標注在類或者方法上,其中幾個常量如 DEFAULT_ORIGINS 已經在Spring 5.0棄用,取而代之的是 CorsConfiguration#applyPermitDefaultValues 方法。
標注在類上,該類的所有方法均會生效
同時也可以類和方法結合使用
@CrossOrigin 註解比較適用於較細粒度的跨域控制,對於全局的跨域控制, Spring Mvc 提供了 Global Configuration 配置。
Spring Mvc 對於全局的 CORS 比較簡單,分為兩個方案
創建 WebConfig 類實現 WebMvcConfigurer 介面,通過 CorsRegistry 設置跨域信息
通過 CorsConfiguration 設置跨域信息,並將 CorsConfiguration 通過 CorsFilter 構造函數傳遞進去
Spring Mvc 對於 CORS 可以說是非常方便,本文主要是想讓各位開發者對跨域有個整體的了解,各個參數代表的含義,而不是在所有項目中都一概而論的設置為「*」,要在自身項目的實際需求以及安全性上多做思考,防止生產事故。
⑵ SpringMvc訪問靜態資源的幾種方法
第一種:在web.xml中配置名為default的servlet-mapping
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
第二種:在SpringMVC配置文件中添加<mvc:resource>標簽
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/img/**" location="/img/"/>
第三種:在SpringMVC配置文件中添加<mvc:default-servlet-handler/>標簽
<mvc:default-servlet-handler/>
第四種:修改SpringMVC的攔截路徑,我這里使用的是/,也就是說所有的鏈接的攔截,
可以修改成*.do或者*.action或者其他,這樣靜態資源就不會攔截了
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
⑶ springmvc環境搭建好了怎麼訪問
項目創建
1
目前進行軟體開發中,不再是創建簡單的java動態項目,而是創建目前比較流行的maven項目。通過創建maven項目可以提高項目的開發效率防止依賴包沖突等一系列問題,可以參考下面的經驗創建maven項目。
9如何創建maven項目
2
maven項目創建完成後,需要在pom的配置文件中,增加對springmvc等jar包的引入;如果創建的是普通動態web項目,需要手動將springMVC需要的jar包添加到系統構建中。
3
在pom文件中,創建一個dependencies依賴配置。然後從maven遠程倉庫或者是中央倉庫中搜索spring-webmvc依賴包,找到plugin配置文件,將這個文件粘貼到剛才創建的依賴中。即可完成對依賴包的引入。
4
查看依賴包是否引入成功,可以點擊maven項目名稱,打開java Resources java資源,在java資源中有個Libraries;展開Libraries,這里有jdk版本和Maven Dependencies(maven依賴),展開maven依賴就可以看到springmvc的jar被引入到項目中。
END
項目配置
1
作為web應用,在WEB-INF下有一個web.xml文件配置。作為web應用,都需要在這里進行配置。maven工程的web.xml文件存放在Deployed Resources部署資源-->webapp-->WEB-INF-->web.xml。
2
打開web.xml文件,需要在這里進行對攔截器的配置。對於攔截器一般都需要配置的是servlet和servlet-mapping兩個文件,因為這里使用的是springmvc的攔截器。所以在servlet-class中選擇springmvc中的分派攔截器。
3
根據springmvc的約定,在web中配置的攔截器的名稱是hello。所以在web-inf文件下需要創建一個hello-servlet的配置文件。這里主要是對框架的一些配置。主要包括控制器包配置;返回頁面的前綴和後綴。
4
創建測試的控制器。創建控制器的包要在hello-servlet中配置。控制器的類上要加上Controller的註解,類中的方法便是一個請求,在方法頭上要加上requestMapping的配置。
5
創建返回的頁面。根據hello-servlet中配置的頁面的前綴和後綴,所以在web-inf文件夾下創建jsp文件夾,根據控制器返回的字元串,需要創建user文件夾,然後在user文件夾下創建add.jsp文件。
END
運行項目
1
運行項目需要在pom文件中增加對jetty插件的引入。在pom文件中,新增節點build-->plugins-->plugin增加jetty插件。
2
運行項目。maven運行項目的時候需要使用maven命令執行。在pom.xml文件上行點擊右鍵,選擇Run as運行--如果是第一次運行,選擇第三個選項。在命令框中輸入命令jetty:run即可運行,如果想跳過測試可以加命令-skipping test。
3
在控制台中如果沒有錯,而且日誌列印出jetty運行成功。說明啟動正常,打開瀏覽器輸入一個servlet控制器查看訪問是否正常。如果頁面沒有報錯而且顯示的是創建的jsp頁面,說明配置正常完成。