【发布时间】:2018-02-08 01:21:46
【问题描述】:
我有一个使用 Angular 2 开发的 web 应用程序和一个使用 Springboot 开发的 Rest API。
Mme Michu ---> WebApp (Angular 2 - Known origin) ---> API (Springboot CORS)
我在 webapp 和 API 之间配置了 CORS,它工作正常。
这是我的 CORSFilter 的实现方式
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCORSFilter implements Filter{
public SimpleCORSFilter () {
super();
}
@Autowired
private Environment environment;
private String[] acao;
@Override
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException {
acao = environment.getProperty("access-control-allow-origin").split(",");
final HttpServletResponse response = (HttpServletResponse) res;
final HttpServletRequest request = (HttpServletRequest) req;
String origin = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", Arrays.asList(acao).contains(origin)?origin:"" );
// without this header jquery.ajax calls returns 401 even after successful login and SSESSIONID being succesfully stored.
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, Origin, Content-Type, Version");
response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, Authorization, Origin, Content-Type");
if(!request.getMethod().equals("OPTIONS")) {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
acao = environment.getProperty("access-control-allow-origin").split(",");
}
}
问题是我需要一个新的移动应用程序(使用 ionic 开发)来与 API 交互。
Mme Michu --> MobileApp (Unknown origin) ---> API (Springboot CORS)
CORS 政策会阻止来自移动应用的请求吗? 由于我不知道移动应用程序的“来源”,如何授权来自移动应用程序的请求?
欢迎任何建议......
【问题讨论】:
标签: spring-boot mobile ionic-framework spring-security cors