하나의 서버에서 Mongo 데이터베이스를 실행하고 JSON을 다른 서버의 프런트 엔드 응용 프로그램에 제공하려면이 두 가지 샘플 Java Spring 응용 프로그램을 함께 사용하려고합니다.Spring Java Mongo REST 응용 프로그램으로 CORS를 구성하는 방법은 무엇입니까?
CORS 튜토리얼 : REST http://spring.io/guides/gs/accessing-mongodb-data-rest/
나의 현재 "MongoDB를 REST와"Spring.io 샘플 응용 프로그램이 실행에 http://spring.io/guides/gs/rest-service-cors/
MongoDB를하지만, 현재 아직까지도 SimpleCORSFilter를 추가 한 후 CORS를 지원하지 않습니다 (위의 CORS 샘플에 나와있는 것처럼).
나는이 새로운 SimpleCORSFilter 클래스를 web.xml의 어노테이션에서 어딘가에 구성해야 할 필요가 있다고 생각하고 있으므로 SimpleCORSFilter 클래스에서 @WebFilter ("/ *")를 사용하려고합니다.
"MongoDB with REST"자습서 페이지에 따르면 "@Import (RepositoryRestMvcConfiguration.class) 주석은 Spring MVC 컨트롤러, JSON 변환기 및 RESTful 프론트 엔드를 제공하는 데 필요한 다른 Bean 콜렉션을 가져옵니다. Spring 데이터 MongoDB 백엔드까지. " 이것은 SimpleCORSFilter 필터를 구성하기 위해 RepositoryRestMvcConfiguration에서 무언가를 무효화해야한다는 것을 나타낼 수도 있습니다.
@WebFilter ("/ ")를 SimpleCORSFilter 클래스 자체에 추가하려고 시도했지만 curl --verbose를 사용하여 응답에 Access Control- 헤더가 표시되지 않습니다. 따라서 필자는 필터가 올바르게 구성되어 있다고 생각하지 않습니다.
누구나이 두 가지 튜토리얼 프로젝트 (또는 비슷한 것)를 결합하여 운이 좋았습니까?
package foo.bar;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@WebFilter("/*")
@Component
public class SimpleCORSFilter extends OncePerRequestFilter implements Filter {
/* Attempt #1 - based on original demo code from spring.io - could not get to work
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
*/
// Attempt #2 - based on https://stackoverflow.com/questions/20583814/angular-and-cors which advised use of addHeader() instead of setHeader() - still no luck
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Headers",
"origin, content-type, accept, x-requested-with, sid, mycustom, smuser");
filterChain.doFilter(request, response);
}
// unable to override this final method
//public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
... 현재 구성을 수행 할 것으로 보인다 주요 응용 프로그램의 클래스는 여기에 있습니다 : : 참고로
, 나는 구성을 시도하고있는 SimpleCORSFilter 클래스는 여기
package foo.bar;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration;
@Configuration
@EnableMongoRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
참고 : 다소 비슷한 게시물을 여기에서 찾았습니다 : CORS with Spring not working,하지만이 솔루션은 JSONP를 사용합니다.이 JSONP는 해킹과 같은 것으로, 어떤 경우에는 해결되지 않는 것으로 보입니다.
매우 동일한 문제가 있습니다. 컨트롤러가없는 스프링 데이터와 MongoRepository를 사용하고 있습니다. 헤더를 추가하고 아직 아무것도 추가하지 않는 필터를 구현했습니다. 나는 그 문제가 무엇인지 이해하지 못한다. 필터가 예상대로 작동하지 않는지 확인하기 위해로드되고 있습니다. –