私はAngular 2で開発されたWebアプリケーションと、Springbootで開発されたRest APIを持っています。Webappとモバイルアプリで使用されるSpring API
Mme Michu ---> WebApp (Angular 2 - Known origin) ---> API (Springboot CORS)
CORSをwebappとAPIの間で設定しても問題なく動作します。ここで
は私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(",");
}
}
の実装方法の問題は、私はAPIと対話する(イオンに開発さ)新しいモバイルアプリケーションが必要だということです。
Mme Michu --> MobileApp (Unknown origin) ---> API (Springboot CORS)
モバイルアプリケーションからの要求がCORSポリシーによってブロックされますか? モバイルアプリの「発信元」がわからないため、モバイルアプリからのリクエストを許可するにはどうすればよいですか?何かアドバイスは大歓迎です
...
私はあなたの答えを理解していません... CORSフィルタはサーバー側であり、クライアント(モバイルアプリ)がどのようにして元の原点を提供できるのでしょうか? – DavidPi
CORSヘッダーはサーバーによって送信されますが、送信元がサーバーと一致しない場合はブロックしているサーバーではありません。異なる起源でテストを行い、サーバーがクライアント(ユーザーのブラウザー)によってブロックされた応答を送り返していることがわかります。サーバーは許可された起点を報告する責任があります。 Webブラウザは、要求が許可されたドメインからのみ送信されるように強制する責任があります。 –
スーパー!私はそれを試してみましょう! Merci;) – DavidPi