Crossorigin不起作用

时间:2018-06-27 05:52:06

标签: spring spring-mvc cors

请让我说出跨域请求被阻止:“同一个源策略”不允许读取http://localhost:8080/users处的远程资源。 (原因:CORS标头“ Access-Control-Allow-Origin”缺失)。

奇怪的是,它对我有用,并且在不更改控制器代码的情况下停止了工作...

UserController.java

@RestController
@CrossOrigin
@RequestMapping(value = "/users")
public class UserController {

@Autowired
private UserService userService;

@RequestMapping(value = "/{userId}", method = RequestMethod.GET)
private User findOne(@PathVariable("userId") Integer userId) {
    return userService.findOne(userId);
}

@RequestMapping(method = RequestMethod.GET)
private List<User> findAll() {
    return userService.findAll();
}

@RequestMapping(method = RequestMethod.POST)
private User create(@RequestBody User user) {
    user.setId(null); // To ensure we create instead of update
    return userService.save(user);
}

@RequestMapping(value = "/{userId}", method = RequestMethod.PUT)
private User update(@PathVariable("userId") Integer userId, @RequestBody User user) {
    user.setId(userId); // To ensure we update instead of create
    return userService.save(user);
}

@RequestMapping(value = "/{userId}", method = RequestMethod.DELETE)
private void delete(@PathVariable("userId") Integer userId) {
    final User user = userService.findOne(userId);
    userService.delete(user);
}
}

这是我在React上获取的内容

 fetch('http://localhost:8080/users', {
    method: 'GET',
    headers: {
    'content-type': 'application/json'
  },
}).then(response => { return response.json();
}).then(data => {
  this.setState({users:data});
});
}

为什么突然停止工作?

编辑:

我尝试制作一个干净的新Maven项目并将所有包复制到该新项目中,现在它可以工作了,但是我仍然不知道为什么它停止工作,代码相同,并且现在可以工作。

1 个答案:

答案 0 :(得分:0)

如果您使用的是 Spring Security ,并且希望在项目中全局使用CORS,请尝试将其添加到配置中:

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {

    httpSecurity
            .cors()
            .and()
            ........ other config

}

但是在此之前,请尝试以下方法。要在课程级别上应用 CORS ,请按以下方式使用它:

@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@Controller
public class SomeController{

}

或在这样的方法级别使用它:

@CrossOrigin("http://example.com")
@RequestMapping("/some")
public Account retrieve() {
    // ...
}

OR

@CrossOrigin(origins = "*")
@RequestMapping("/some")
public Account retrieve() {
    // ...
}