如何跨域直接访问Axis2服务接口
昨天遇到一个跨域直接访问Axis2服务接口的问题,以前一直是直接java后台解析,然后将结果返回给前台,于是昨天就试着处理了一下这个问题,不过还好成功了
Axis2服务可以通过解析直接访问,但是有时候我们需要通过ajax来直接获得服务的数据,这里就存在着一个跨域问题
通常会报如下的错误提示:
Access-Control-Allow-Origin
这种问题,如果是针对普通Spring的controller(如果您会Spring框架,应该知道),返回一个json,那么也是很好解决
只需要添加一个相应头即可,如下面类似的代码
response.setHeader("Access-Control-Allow-Origin", "*");
但是对于使用Axis2发布的服务接口,如果你想直接在前端使用跨域来请求接口地址,获得数据,也是需要设置一个响应头的,具体的做法如下
1,创建一个Filter,其主要作用就是向客户端发送一个允许所有人访问的相应头:Access-Control-Allow-Origin
public class MyFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) arg1; httpResponse.addHeader("Access-Control-Allow-Origin", "*"); arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
2,在我们的web.xml中添加如下代码
MyFilter MyFilter MyFilter /services/*
3,在客户端使用如下的ajax代码进行请求即可
$.ajax({ type: "get", contentType:"application/x-www-form-urlencoded;charset=UTF8", dataType:'xml', url:'http://192.168.0.101:8080/eqUseStatus-portlet/services/Axis2ServiceImpl/Axis2Start?screenname=test&sycode=SY2017040255454&iden=uK1sX4DCQx2WvglpDVuuQw==', success:function(data){ console.log(data); alert(data); }, error:function(data){ alert(111); } })
通过上面的代码就可以拿到数据可。
另外,下面两张图片展示了通过上面的配置后,某网站首页和services目录(上面url-pattern配置的路径)的相应头信息
相应头没有Access-Control-Allow-Origin
相应头有Access-Control-Allow-Origin
通常,Axis2发布的是一个服务,提供的是如下地址,我们需要解析如下地址,以得到该服务具体有那些方法,方法的传入参数和返回结果
http://XXX.XXX.XXX.XXX/eqUseStatus-portlet/services/Axis2ServiceImpl?wsdl
我们也可以通过上面ajax里面写的那样直接调用接口
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情