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) {
        ...
    }
});

标签: Tomcat, 跨域, jQuery

评论已关闭