2016-12-07 12 views
1

に設定されていない私は、CORSヘッダーを設定するにはいくつかの方法を試してみました:アクセス制御 - 許可 - 起源応答

  • はcom.thetransactioncompany.cors-ファイラー
  • を使用して自分のサーブレットフィルタ
  • を追加します
  • スプリングの使用WebMvcConfigurer Bean

何も機能していません!

誰かが私を助けますか?ここで第一の方法...

web.xmlの

<!-- Spring Container --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextClass</param-name> 
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
</context-param> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>de.hotelonlineportal.config.AppConfig</param-value> 
</context-param> 

<!-- Device Detection --> 
<filter> 
    <filter-name>deviceResolverRequestFilter</filter-name> 
    <filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class> 
</filter> 

<!-- Rest Dispatcher --> 
<servlet> 
    <servlet-name>rest-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>rest-dispatcher</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<!-- Spring Security --> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

<!-- CORS Filter --> 
<filter> 
    <filter-name>cors-filter</filter-name> 
    <filter-class>de.hotelonlineportal.security.CORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cors-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

CORSFilter.java

public class CORSFilter implements Filter { 

    private static Logger logger = LogManager.getLogger(CORSFilter.class); 

    public CORSFilter() { 
     logger.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() { 
    } 

} 

フィルタが正常に適用されてしまったが、それでもrepsonseは、任意のアクセスが含まれていないHTTPリクエストを起動した場合-Control *ヘッダー。

クロームデバッガは、コンソールで私にこれを示しています

XMLHttpRequestが http://localhost:8080/hop-backend/rest/shop/listHotelsLandingPageをロードすることはできません。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。したがって、オリジン 'http://localhost:9000'は許可されません。 応答はHTTPステータスコード500でした。

+0

、何がありますか?デバッグの目的のために、ヘッダーAccess-Control-Allow-Originを*に設定しようとしましたか? –

+0

サーバーのログを確認してください。 – zeroflagL

+0

request.getHeader( "Origin")は私にhttp:// localhost:9000を表示します。私もワイルドカード*を試しました。 –

答えて

0

あなたはtomcatを使用しているかどうかを検査しています。 tomcat-CORSFilterをお試しください。

以下のようにフィルタとinit-PARAMを使用して:あなたはrequest.getHeader( "起源")をログインした場合

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>*</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.support.credentials</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.preflight.maxage</param-name> 
    <param-value>10</param-value> 
    </init-param> 
</filter> 
<!-- CORS Filter --> 
<filter> 
    <filter-name>cors-filter</filter-name> 
    <filter-class>de.hotelonlineportal.security.CORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cors-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
関連する問題