2016-04-02 238 views
1

我试图使用同春启动web服务我有我的RestControllerPage:的JavaScript +春季启动

@RequestMapping(
      value="/api/user/connection", 
      method = RequestMethod.POST, 
      consumes = MediaType.APPLICATION_JSON_VALUE, 
      produces=MediaType.APPLICATION_JSON_VALUE 
    ) 
    public ResponseEntity<User> connect(@RequestBody Authentification authentification){ 
     try { 
      if (authentification.getLogins() == "" || authentification.getLogins() == null) { 
       return new ResponseEntity<User>(HttpStatus.INTERNAL_SERVER_ERROR); 
      } 
      String val = Md5.md5(authentification.getPwd()); 
      int nbuser = userDao.countUser(authentification.getLogins(), val); 
      // we get the user for update the token 
      LinkedList<User> listUser = userDao.findByLoginsAndPwd(authentification.getLogins(), val); 
      if (listUser.get(0).getToken() == "" || listUser.get(0).getToken() == null) { 
       listUser.get(0).setToken(Md5.md5(listUser.get(0).getId() + listUser.get(0).getLogins())); 
      } 
      if (userDao.save(listUser.get(0)) == null) { 
       return new ResponseEntity<User>(HttpStatus.INTERNAL_SERVER_ERROR); 
      } 
      return new ResponseEntity<User>(listUser.get(0),HttpStatus.OK); 
     }catch(Exception e){ 
      return new ResponseEntity<User>(HttpStatus.INTERNAL_SERVER_ERROR); 
     } 
    } 

而对于接触这个Web服务,我在其他页面使用jQuery了春天启动服务器:

<html> 

<head> 

    <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $('#BtnValidate').click(function(){ 
       $.ajax({ 
        type: "POST", 
        contentType: 'application/json', 
        dataType:'json', 
        url:'http://localhost:9000/api/user/connection', 
        data:JSON.stringify({ 
         logins:$('#Txtlogin').val(), 
         pwd:$('#TxtPwd').val() 
        }), 
        success: function(data){ 
         $('.notification').html("<p> response : "+data.d+"</p>"); 
        }, 
        error:function(){ 
         alert('Error in the webService'); 
        } 

       }); 
       return false; 
      }); 


     }); 

    </script> 
</head> 

<body> 

     <label>Login : </label> 
     <input type="text" id="Txtlogin"> 
     <br/> 
     <label>Pwd : </label> 
     <input type="pwd" id="TxtPwd"> 
     <br/> 
     <input type="button" id="BtnValidate" value="validate"/> 

    <div class="notification"> 

    </div> 
</body> 
</html> 

,我得到这个错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403. 

我真的锁。

谢谢

+0

我相信答案已经给出[这里](http://stackoverflow.com/a/20035319/6148859)。 –

+0

非常感谢:) – zaafrani

回答

0

所以你试图从JavaScript到不同的主机或端口进行API调用? 由于同源策略,默认情况下不允许。但是,您可以启用Spring Boot中的跨源请求Enable CORS in Spring Boot

+0

我在测试这个谢谢 – zaafrani

+0

但是我必须把我的html页面放在我的spring服务器上? – zaafrani

+0

因为我正在使用RestController并且没有像这样的控制器.. – zaafrani

0

必须将CORS头添加到您的请求的目标中。因此,如果Spring Boot应用程序在其上下文之外调用服务,则需要为该服务添加CORS支持。你这样做的方式取决于运行你的服务的平台。

例如,在AWS上,您可以在设置中为S3网站设置CORS支持。

如果您可以控制其他服务,并且它是Spring Boot应用程序,那么您可以实现链接中建议的仅针对其他服务的内容。

0

您可以使用@crossorigin批注接受所有请求标头。