Я пытаюсь объединить эти два примера приложений Java Spring вместе, чтобы иметь возможность запускать мою базу данных Mongo на одном сервере и обслуживать JSON для внешнего приложения на другом сервере.Как настроить CORS с помощью приложения Spring REST Spring Java?
CORS учебник: http://spring.io/guides/gs/rest-service-cors/
MongoDB с REST http://spring.io/guides/gs/accessing-mongodb-data-rest/
Мои текущие "MongoDB с REST" Spring.io работает приложение образца, но в настоящее время он еще не поддерживает CORS даже после добавления SimpleCORSFilter класс, как показано в образце CORS (см. выше).
Я думаю, что мне просто нужно настроить этот новый класс SimpleCORSFilter где-нибудь - в эквиваленте аннотации web.xml - поэтому я пытаюсь использовать @WebFilter ("/ *") в классе SimpleCORSFilter.
В соответствии с учебной страницей «MongoDB with REST» в аннотации @Import (RepositoryRestMvcConfiguration.class) импортируется коллекция контроллеров Spring MVC, преобразователей JSON и других компонентов, необходимых для обеспечения интерфейса RESTful. вплоть до данных Spring MongoDB. » Это может указывать на то, что я также должен переопределить что-то в RepositoryRestMvcConfiguration, чтобы настроить фильтр SimpleCORSFilter.
Я попытался добавить @WebFilter ("/ ") в класс SimpleCORSFilter, но я не вижу заголовков Access-Control- в ответе с помощью curl -verbose. В результате я не думаю, что фильтр настроен правильно.
Неужели кому-то повезло с объединением этих двух учебных проектов (или чего-то подобного?)?
Для справки, класс SimpleCORSFilter Я пытаюсь настроить здесь:
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() {}
}
... и основной класс приложений, которые в настоящее время, кажется, выполняет настройку здесь:
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, которое я также читал, было своего рода взломом, и в любом случае эта проблема также не решена.
Имея ту же проблему. Я использую весенние данные и MongoRepository без контроллеров. Реализован фильтр, чтобы добавить заголовки и все еще ничего. Я не понимаю, в чем проблема. Фильтр загружается наверняка, он просто не делает того, что ожидается. –