스프링 부트에서 CORS를 활성화하는 방법 - 작동하지 않음
Spring Boot 앱에서 CORS를 활성화하려고 하는데 전혀 작동하지 않습니다.
난 시도했다.
@CrossOrigin
주석- 스프링 부트 및 각진 JS가 작동하지 않는 CORS
- 그리고 이 https://spring.io/guides/gs/rest-service-cors/ .
현재로서는 이 문제를 어떻게 해결해야 할지, CORS가 작동하지 않는 것에 대해 어떤 문제가 있는지 전혀 모르겠습니다.
내 코드
컨트롤러
@RestController
public class DbController {
@Autowired
private IDAO conn;
@CrossOrigin
@GetMapping("/foo")
public List<Foo> getFoo() {
return conn.getFooFromDao();
}
}
DAO
@Repository
public class DaoImpl implements IDAO {
@Autowired
private JdbcTemplate temp;
public List<Foo> getFooFromDao() {
List<Foo> data = new ArrayList<>();
String sql = "SELECT fooName FROM BigFoo ORDER BY fooName ASC;";
data.addAll(temp.query(sql, new BeanPropertyRowMapper(BigFoo.class)));
return data;
}
}
예상:
어떤 방법으로든 모든 오리진/도메인에서 컨트롤러에 액세스할 수 있어야 합니다.
실제:
오리진/도메인에서 컨트롤러에 액세스할 수 없습니다.그러면 Angular 프런트 엔드에 다음 오류가 발생합니다.
편집: 프런트 엔드의 내 오류
원산지 'http://localhost:4200'의 'localhost:8080/foo'에 있는 XMLHttpRequest에 대한 액세스가 CORS 정책에 의해 차단되었습니다.교차 오리진 요청은 프로토콜 체계(http, data, chrome, chrome-extension, https)에만 지원됩니다.
두 번째 편집:
Angular(프론트 엔드)에 있는 내 코드입니다.
서비스
getFoo() {
return this.http.get("localhost:8080/foo");
}
사용 중HttpClient
부터import { HttpClient } from "@angular/common/http";
저는 또한 URL을 복사하여 브라우저에 붙여넣어 해당 서비스 방식으로 작동하는 것을 확인했습니다.실제로 잘못된 URL이나 오타 가능성을 생략한 JSON을 반환합니다.
교차 원점을 컨트롤러 레벨 자체에 배치
@RestController
@CrossOrigin(origins = "*")
public class DbController {
@Autowired
private IDAO conn;
@GetMapping("/foo")
public List<Foo> getFoo() {
return conn.getFooFromDao();
}
}
이는 봄에 권장되는 직접 솔루션이며, 모든 응답에 대해 교차 원점을 허용하는 필터를 정의할 수도 있습니다.
@Component
public class SimpleCORSFilter implements Filter {
private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class);
public SimpleCORSFilter() {
log.info("SimpleCORSFilter init");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
또한 코드 스냅샷에 http 또는 https 프로토콜을 언급하지 않았고 GET 요청도 아직 보내지 않았습니다. 이렇게 구독을 시작하면 요청이 전송됩니다.
getFoo() {
return this.http.get("http://localhost:8080/foo");
}
getFoo().subscribe(resp -> { // your logic });
// or directly inside getFoo() like this
getFoo() {
return this.http.get("http://localhost:8080/foo")
.subscribe(resp -> { // your logic });
}
주석에 대한 오리진을 추가해야 합니다.@CrossOrigin(origins = "*")
언급URL : https://stackoverflow.com/questions/56927217/how-to-enable-cors-in-spring-boot-not-working
'programing' 카테고리의 다른 글
ORA-02303: 형식을 삭제하거나 형식 또는 테이블 종속자로 대체할 수 없습니다. (0) | 2023.07.20 |
---|---|
git://protocol이 회사에 의해 차단되었습니다. 어떻게 하면 피할 수 있을까요? (0) | 2023.07.20 |
Truthy와 Falsy는 무엇입니까?참 및 거짓과 어떻게 다릅니까? (0) | 2023.07.20 |
null이 아닌 필드 'new_field'를 기본값 없이 사용자 프로파일에 추가하려고 합니다. (0) | 2023.07.20 |
SQL Server의 임시 테이블 범위 (0) | 2023.07.20 |