【问题】ssm前后端分离设置跨域导致SessionId不一致

问题描述:后台使用ssm,前端angularJS,最近在开发过程中开始尝试前后端分离的开发模式,意外的是前端html在发送ajax请求到我的服务器时,出现了跨域问题,请求发送不成功!

解决:查看了大量的文章,没有什么完全类似的问题,综合一下,在项目中创建一个过滤器,在过滤器中设置HTTP头信息,设置允许跨域,然后在web.xml配置文件中配置该过滤器

过滤器代码:

package cn.com.qxev.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**  
* @ClassName: CorsFilter  
* @Description: 解决跨域问题
* @author Shw
* @date 2018年4月3日  
*/

public class CorsFilter implements Filter {

 

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

response.setContentType("textml;charset=UTF-8");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "0");
response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("XDomainRequestAllowed","1");

                chain.doFilter(req, res);   
}

@Override
public void init(FilterConfig arg0) throws ServletException {
}

}

web.xml配置:

<filter>

    <filter-name>CorsFilter</filter-name>
    <filter-class>cn.com.qxev.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>

注意:

前端ajax中要加入withCredentials = true; 这个属性,跨域XHRHTTPRequest请求,浏览器是不会发送身份凭证信息的,改属性配合之前我们设置的response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));这个属性就可以做到浏览器发送身份凭证信息,服务器接收的目的。

 

但是!!!!前端同事加入了这个配置之后并没有什么卵用,跨域是没有问题了,但是sessionId还是不一致!!!

 

于是,同事修改了前端代码,不在ajax中加入这条属性,在js的全局配置中加入

app.config(['$httpProvider', function($httpProvider) {  
   $httpProvider.defaults.withCredentials = true;  

}]);

至此,sessionId才保持一致,至于为什么局部配置没效果,这个我也没弄清楚,可能是写的方式不对吧,前端我也不是很懂,大家有类似的问题可以参考一下。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值