$("#loginBtn").click(function(){
$.ajax({
type: "get",
url: "http://192.168.43.142:8080/travelnotes/login",
data: {
"account": $("#account").val(),
"password": $("#password").val()
},
//crossDomain和xhrFields跨域请求(带cookie)
crossDomain: true,
xhrFields: {
withCredentials: true
},
datatype: "json",
success: function(data){
console.log(data);
},
error: function(){
console.log("失败");
}
});
});
String url = request.getHeader("Origin");
System.out.println(url);
if(!url.isEmpty()) {
response.setHeader("Access-Control-Allow-Origin", url);
response.setHeader("Access-Control-Allow-Credentials","true");
}
如果ajax跨域请求设置了headers,会调用一次options请求获取服务器是否允许此域名的请求的,如果没有设置Access-Control-Allow-Headers就会报跨域错误。
response.setHeader("Access-Control-Allow-Headers","Token");
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<servlet>
<servlet-name>mvc-dispatcher</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>
<init-param>
<!-- Springmvc接受OPTIONS请求
开启后还需要响应的@CrossOrigin
-->
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
@CrossOrigin(allowedHeaders= "Token")
@RequestMapping(value = "/login" , method = RequestMethod.POST)
public void login(@RequestParam("account")String account,
@RequestParam("password") String password,
HttpServletResponse response) {
System.out.println("acount ="+account);
System.out.println("password ="+password);
String json = userService.login(account, password);
System.out.println(json);
try {
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
} catch (IOException e) {
e.printStackTrace();
}
}