2016-06-15 2 views
1

Spring Boot 1.3.3アプリケーションからSpring Security 4.0.3を使用する。 "API" REST APIと"UI"ウェブベースのためのインターフェース(Thymeleaf +春のWeb MVC):Spring Securityは、保護されていないURLの場合は401を返します

アプリケーションは、HTTPコンテンツの2種類があります。

アプリケーションのREST APIのほとんどのエンドポイントは、Basicを使用してセキュリティ保護されていますが、一部ではありません。は常にである必要があります。

簡略化された構成は、次のようになります。予想通り

 // In one method, the security config for the "API" 
     httpSecurity 
       .antMatcher("/api/**") 
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER) 
       .and() 
       .authorizeRequests() 
       .antMatchers("/api/ping").permitAll() 
       .antMatchers("/api/**").hasRole("USER") 
       .and() 
       .httpBasic(); 

     // In another method, the security config for the "UI" 
     httpSecurity 
       .authorizeRequests() 
       .antMatchers("/ui/", "/ui/index.html", "/ui/css/*", "/ui/js/*", "/ui/img/*").permitAll() 
       .antMatchers("/ui/user/**").hasRole("USER") 
       .antMatchers("/ui/**").denyAll() 
       .and() 
       .formLogin().loginPage("/ui/login.html").permitAll().failureUrl("/ui/login.html").defaultSuccessUrl("/ui/user/main.html") 
       .and() 
       .logout().logoutUrl("/ui/logout").permitAll().logoutSuccessUrl("/ui/login.html") 
       .and() 
       .httpBasic(); 

は、セキュリティで保護されたエンドポイントへのアクセスが働きます。

しかし、 ".../api/ping" のような公開エンドポイントへのアクセスは、ユーザーが無効な基本認証を提供したときに401で失敗します。もちろん、そのようなエンドポイントは、有効でないか、または有効な基本認証が提供されているときに正常に機能します。

このSpring Securityの401は驚くべきことです。選択したエンドポイントに対して401や403を返さないSpring Securityの設定をどうやって実装できますか?

ありがとうございます。

アップデート1は:

答えて

0

順序が重要である、 "UI" 存在とセキュリティの設定に関する情報を追加しました。最も具体的なルール(パス)最初:

httpSecurity 
    .antMatchers("/api/ping").permitAll() 
    // and then the rest 

このantMatcher("/api/**")上のような試合がある場合ので、春のセキュリティは、後でルールを評価しません。

+0

まず、「UI」に関する詳細を追加しました。残念なことに、最初の "andMatcher( '/ api/**')がSpringセキュリティコンフィグレーションの2つの部分が分離されていることを確認する必要があるので、あなたの提案はここではうまくいきません。 –

関連する問題