您的位置:首页 > 编程语言 > Java开发

SpringMvc支持跨域和自定义header

2016-11-16 15:14 330 查看
<!-- 支持options类型请求 -->
<servlet>
<servlet-name>application</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

1 web.xml 配置上面 支持 options请求

2  options请求会请求两次服务器 第一次是嗅探 返回200 即可

   第二次在让请求进入正式接口 [具体代码进入第三步的filter 里面处理]

 3 服务器filter 还需要加入 

response.setHeader("Access-Control-Allow-Origin", "*");
//		response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,token");
response.setHeader("Access-Control-Allow-Headers", "Content-Type,token"); // 加入支持自定义的header 加入元素 token 前端就可以发送自定义token过来
response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
response.setHeader("X-Powered-By"," 3.2.1");
response.setHeader("Content-Type", "application/json;charset=utf-8");

if(request.getMethod().equals("OPTIONS")){
response.setStatus(200);
//			chain.doFilter(request, response);
}
else{
if ( shortUri.equals("login.html")) {
chain.doFilter(request, response);
}else{
try {
String token = request.getHeader("token");
if (token == null ||token.length()<= 0) {
//chain.doFilter(request, response);
//						Writer.write(response, "token不存在");
Writer.write(response, "token为空,请重新登录");
} else {
Long tokenValue= (Long.valueOf(token)-12345)/31 ;
request.setAttribute("uid", String.valueOf(tokenValue));
chain.doFilter(request, response);
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
Writer.write(response, "token错误,请重新登录");
}
}
}


4 控制器 

 method = RequestMethod.GET 不要加

//3 获得当前用户的列表信息
@RequestMapping(value = "getnowuser"  ) //, method = RequestMethod.GET
@ResponseBody
public  Map<String, Object> getNowUser(@Uid String uid) throws JsonProcessingException{ // @Uid String uid
if(!isHasSuperRole(uid))
return Ajax.buildErrorResult(noPermission);

//		User user   =  userService.findUserById(Long.parseLong(uid));
Staff staff =  staffService.findStaffById(Long.parseLong(uid));
return Ajax.getSuccessReturnMapWithData(staff);
}


5 ajax前端跨域访问

$.ajax({

        beforeSend: function(request) {

            request.setRequestHeader("token", userToken);

        },

        url:url,

        dataType:'json',

        processData: true,

        data:para,

        type:'get',

        crossDomain:true,

        success:function(data){

            callback(data);

        },

        error:function(XMLHttpRequest, textStatus, errorThrown) {

            alert(XMLHttpRequest.status);

            alert(XMLHttpRequest.readyState);

            alert(errorThrown);

        }

    });

关注微信公众号:

留言暗号给他: 我是程序员  即可赠送一套mysql dba视频 记得不要取消关注 因为不定期送视频 

他们有1700G it视频  (识别二维码 或者搜索公众号 历史帝 或者zhenshidelishi)







赠送视频如下:









或者一套redis视频







不定期送视频 

1700G it视频  等你来!

更新!!

元宵节巨献:2月12 号 赠送 多套花钱买的架构师视频

赶紧去关注吧!!




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc