我正在使用Spring Boot v1.5.1,似乎我对CORS起源的限制不起作用。
我的application.properties文件包含以下行(ref1 ref2)。
endpoints.cors.allowed-origins=http://mydomain.io
我的REST控制器如下所示。
@RestController
@CrossOrigin
@RequestMapping("/api/car")
public class CarCtrl {
@Autowired
private CarService carService;
@GetMapping
public Car get() {
return carService.getLatest();
}
}
但是,当我打开浏览器并输入http://localhost:8080/api/car
时,我仍然可以访问REST端点。
我还尝试按如下方式更改我的注释,但这不起作用。
@CrossOrigin("${endpoints.cors.allowed-origins}")
关于我做错的任何想法?
请注意,我没有像post那样使用WebMvcConfigurerAdapter
。我是否真的需要扩展此类以明确控制原点?我认为除了属性文件设置之外,@CrossOrigin
注释将能够控制允许的原点(而不是必须以编程方式执行)。
答案 0 :(得分:7)
但是,当我打开浏览器并输入http://localhost:8080/api/car时,我仍然可以访问REST端点。
CORS allowed-origins设置不会阻止您直接在浏览器中打开URL。
浏览器仅对使用XHR或Fetch或jQuery $.ajax(…)
的网络应用程序中运行的JavaScript代码施加CORS限制,或者用于制作跨源请求。
因此,CORS不是一种阻止用户直接导航到URL的方法,也不是阻止非{web}客户端,如curl
或邮递员或其他任何人访问URL的方法。
答案 1 :(得分:1)
在@CrossOrigin(" http://mydomain.io")中明确指定域为字符串将起作用。我没有'认为这将起作用@CrossOrigin(" $ {endpoints.cors.allowed-originins}")。
答案 2 :(得分:1)
至于我,我在我的应用程序中添加了CrossRef Filter。
package com.alexfrndz.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class SimpleCORSFilter extends GenericFilterBean {
/**
* The Logger for this class.
*/
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) resp;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
//response.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(req, resp);
}
}