使用工具:myeclipce 10,tomcat7
首先说明一下,这是一个web项目,我的跨域有一个
--->config.xml文件(如下)
<?xml version="1.0" encoding="utf-8" ?>
<taxrates>
<taxrate key="url">
<value>http://127.168.0.1:8080/PriceTag/</value>
<name>后台数据交互地址</name>
</taxrate>
<taxrate key="urlFile">
<value>http://127.168.0.1:8080/PriceTag/UploadController/upload</value>
<name>上传文件地址</name>
</taxrate>
</taxrates>
</xml>
--->通过js的方式获取后台数据交互地址
js(如下)
<script>
//读取配置文件
function readXML(id){
var val="";
$.ajax({
url: "config/config.xml",
dataType: 'xml',
type: 'GET',
async:false,
timeout: 2000,
error: function(xml)
{
HJSJ.prompts("error","加载XML 文件出错!");
},
success: function(xml)
{
$(xml).find("taxrate").each(function(i)
{
if($(this).attr("key")==id){
val= $(this).children("value").text();
}
});
}
});
return val;
}
</script>
随后就是一个简单的ajax请求了,需要注意的是,传输到后台的都是json数据,我们定义一个js数组。需要转换成JSON.stringify("parameter")类型,parameter为存放的值,后台才能接收到。我使用的是mybatis所以直接用字符串接受。
试例:
@Controller("LoginController")
@RequestMapping(LoginController.Location)
public class LoginController extends BaseController{
public static final String Location = "/web_login";
//登录
@RequestMapping(value="/login",method=RequestMethod.POST)
public @ResponseBody JsonCrudModel<String> login(@RequestBody String data,HttpServletRequest request,HttpServletResponse response) throws Exception{
final JsonCrudModel<String> result = new JsonCrudModel<String>();
if (data==null || data.equals("")) {
result.setCode(JsonCrudModel.Status_Parameter);
result.setMsg("参数有误");
return result;
}
try {
//1.创建JSON解析对象(两条规则的提现:大括号用JSONObject,注意传入数据对象)-->这里解析会再封装成一个方法调用
JSONObject jObj = new JSONObject(data);
//System.out.println(jObj);
JSONObject jObj1 = jObj.getJSONObject("parameter");
String userName = jObj1.getString("userName").trim();
String password = jObj1.getString("password").trim();
//String token = jObj.getString("token");
//String machine = jObj.getString("machine");
String pwd = PasswordUtils.encryptPassword(password,"hj2018", "!");
//System.out.println(pwd);
User user = userService.getLoginUser(userName, pwd);//这里是数据库验证
}
}
以上是一个请求的流程。
现在我们没有配置,故请求是发送不过去的。
一,我们在web.xml中配置如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<!-- 中文过滤器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.hjsj.filter.EncodingingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 跨域请求 -->
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.cn.filter.CorsFilter</filter-class>------->这里是我自己项目过滤器的位置
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- springmvc -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
二,com.an.filter包下CorsFilter类
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* TODO:
*
* @author: jonath
* @date: 17-3-2
*/
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
httpResponse.addHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, PUT, DELETE, POST");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
三,跨域所需要的jar包
cors-filter-1.7.1-sources.jar
cors-filter-2.5.jar
java-property-utils-1.9.1-sources.jar
junit-4.10-sources.jar
servlet-api-2.5-sources.jar
这里我用jar包名称,方便记忆。