跨域问题

来源:互联网 发布:mac的jdk路径 编辑:程序博客网 时间:2024/06/14 07:47

跨域:跨当然是跨过去,域当然是别的服务器 (说白点就是去别服务器上取东西) 只要协议、域名、端口有任何一个不同,都被当作是不同的域;

下面提供两个方式解决跨域

1.jsonp方式:

网页端:

$.ajax({
type:'get',
url:'http://192.168.1.110:8080/NeoTest/userController/showUser',
dataType:'jsonp',
jsonp:"jsonpCallback",
data:{"name":'5'},
success:function(data){
console.log('data:'+JSON.stringify(data ));
},
error:function(err){
console.log('err:'+err);
}
})

server端:

HttpServletResponse response;

   try {  
          response.setContentType("text/plain");  
          response.setHeader("Pragma", "No-cache");  
          response.setHeader("Cache-Control", "no-cache");  
          response.setDateHeader("Expires", 0);  
          Map<String,String> map = new HashMap<String,String>();   
          map.put("result", "content");  
          PrintWriter out = response.getWriter();       
          JSONObject json=new JSONObject();
          String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数  
          User user=this.userService.getUserById(2);
          json.put("user", user);
          out.println(jsonpCallback+"("+json.toString()+")");//返回jsonp格式数据  
          out.flush();  
          out.close();  
        } catch (IOException e) {  
          e.printStackTrace();  
        } 


2.CORSFilter

   网页端:

$.ajax({
type:'get',
url:'http://192.168.1.110:8080/NeoTest/userController/showUser',
dataType:'json',
data:{"name":'5'},
success:function(data){
console.log('data:'+JSON.stringify(data ));
},
error:function(err){
console.log('err:'+err);
}
})

server端:

public class CORSFilter implements Filter {
private static int count=1;
public CORSFilter() {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response=(HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");  
       response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");  
       response.setHeader("Access-Control-Max-Age", "3600");  
       response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type");  
       response.setHeader("Access-Control-Allow-Credentials", "true");  
       chain.doFilter(req, res);  
       System.out.println("***filter***"+count++);
}
@Override
public void init(FilterConfig arg0) throws ServletException {

}
}

然后在web.xml配置

    <filter>
    <filter-name>CORSFilter</filter-name>
    <filter-class>cn.zhang.core.CORSFilter</filter-class>
  </filter>
   <filter-mapping>
        <filter-name>CORSFilter</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>

即可。

以上。

谢我跟你急!就是这么不要脸。。。

0 0
原创粉丝点击