Springboot中解决Ajax请求跨域问题

问题由来:

总结一下自己学习过程中遇到的问题,在SpringMVC中ajax中的的url请求可以直接跳转到对应控制类的映射地址,而将相同的项目代码移植到SpringBoot中后却发现此功能失效了,一开始以为是代码出错自己反复检查了好久,后来经老师点拨发现是ajax所在的html页面的启动端口是63342:项目代码如下


    
    用户注册
    
    


    

请输入账号:

请输入用户名:

请输入密码:

html文件路径:/templates/register.html

控制类部分代码如下:

@Controller
@CrossOrigin(origins ="*",maxAge = 3600)
public class registerController {
    @ResponseBody
    @RequestMapping("/register")
    public String register(@RequestBody String json) throws IOException {
        String data;
        System.out.println("--------------------------------------------------");
        System.out.println(json);
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        int userNo = user.getUserNo();
        String userName = user.getUserName();
        String password = user.getPassword();
        System.out.println("--------------------------------------------------");

        if(userNo==10011&&"张三".equals(userName)&&"123456".equals(password)){
            data="注册成功,请登录";
           return data;
        }else{

                 data=   "注册失败";
                 return data;
        }
    }
}

问题分析:

在原本的SpringMVC项目中,ajax中url的值是"/register",它能指向控制类"/register"映射的原因是:SpringMVC框架的前端页面都是由Tomcat启动,走的是统一的8080端口,而在SpringBoot项目中,由于它是内嵌的Tomcat,因此控制类依旧走的8080端口,而自己编写的html页面却不经过Tomcat服务器,因此就造成了ajax请求跨域的问题。


解决方案:

此解决方案仅针对于当前的问题域:

在ajax请求中的url应指向控制类映射地址的具体路径,包括端口号

url:"http://localhost:8080/register"

在对应的控制类中添加注解

@CrossOrigin(origins ="*",maxAge = 3600)接收相应端口的请求,这里的*是通配符,由于是自己做的项目所以没有考虑安全问题,建议都设置成请求地址的端口号来一一匹配。

你可能感兴趣的:(Springboot,ajax,spring,boot)