SpringMvc支持跨域和自定义header

 
  <!-- 支持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);
        }
    });

 

 

 

 

赠送视频如下:

 

或者一套redis视频

 

不定期送视频 

1700G it视频  等你来!

 

更新!!

 

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

 

赶紧去关注吧!!

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值