如何跨域直接访问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/天,具体规则查看活动详情