⑴ 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页面,说明配置正常完成。