SSM WebPack NodeJS jQuery Tomcat7服务器,跨域访问解决方案
SSM WebPack NodeJS jQuery Tomcat7服务器,跨域访问解决方案
一个前后端分离SSM,WebPack,NodeJS,jQuery项目,使用Tomcat服务器,添加跨域CORS支持,
搜索到的方案大多是:
pom.xml中添加:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>8.0.22</version>
<scope>provided</scope>
</dependency>
web.xml(可在服务器范围,也可在本项目的WEB-INF下,添加:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
到 https://mvnrepository.com/ 下载 tomcat-catalina jar文件添加到build-path后,启动服务器提示找不到类:org.apache.catalina.filters.CorsFilter。
并不是该类不存在,而是因为tomcat服务器拒绝加载已经属于服务器运行时的jar(tomcat-*.jar,servlet .jar,…)
改为使用以下CORS过滤器:
http://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter 的pom.xml
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.4</version>
</dependency>
web.xml中
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此,服务器正常启动,跨域问题解决。
但是登录时总是重新跳转回登录页面应该是跨域后,前端cookie中的sessionid和后端给的不在同一域,前端成功登录后跳转其它页面后,其它页面服务器再次认为没有成功登录。
解决方法:在js的ajax请求中附加如下数据:
xhrFields:{
withCredentials:true
},
JQuery:
$.ajax({
type: param.method || 'get',
url: param.url || '',
dataType: param.type || 'json',
data: param.data || '',
xhrFields: {
withCredentials: true
},
success: function (res) {
...
},
error: function (err) {
...
}
});
评论已关闭