2016-06-28 12 views
0

基本認証にSpringセキュリティを使用して、春のブートRESTアプリケーションを保護しようとしています。春のブート(デフォルト)のセキュリティ設定を無効にすることができません

デフォルトの基本認証は、単純に次の依存関係に

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 

を差し込むことによって動作し、次のステップは、いくつかのカスタム資格情報(ユーザー名、パスワード)と春ブーツが提供するデフォルトの認証資格情報を上書きすることです。

私はこの使用して試してみました:

@RestController 
@SpringBootApplication 
public class Controller { 

    // request mappings and other code here 

    public static void main(String[] args) { 
     SpringApplication.run(Controller.class, args); 
    } 
} 

私が午前問題は、私はカスタムのもので、デフォルトの資格情報を上書きすることができませんということです。

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    @Autowired 
    public void configure (AuthenticationManagerBuilder authBuilder) throws Exception { 

     authBuilder.inMemoryAuthentication() 
      .withUser("aide").password("aide").roles("USER").and() 
      .withUser("pervacio").password("pervacio").roles("ADMIN"); 
    } 

    @Override 
    @Autowired 
    protected void configure (HttpSecurity http) throws Exception { 

     http.httpBasic().and() 
      .authorizeRequests() 
       .antMatchers(HttpMethod.POST, "/search").hasRole("ADMIN") 
      .and().csrf().disable(); 
    } 
} 

は、ここに私のコントローラです。

どうすればよいですか?

他の投稿はconfigureの方法にAutowiredの注釈を付けることを提案していますが、それは私のためには機能しません。

私は間違っていますか?私はofficial exampleに従って上記のアプローチを試みました。

+0

あなたはどのような動作をしていますか?例外が発生した場合、またはカスタム認証情報でユーザーを認証できない場合 –

+0

@ChathurangaTennakoonは尋ねてくれてありがとう。デフォルトのユーザ名(つまり、 'user')とデフォルトの(ランダムに生成された)パスワードは、承認されたものです。上記の 'SecurityConfiguration'で定義された私のカスタム認証情報は' 401 Unauthorized(Bad Credentials) 'レスポンスを取得します。 –

+0

あなたはスプリングベースのログインフォームを共有できますか?私はそれに夢中になる必要がありますか?あなたはカスタムログインフォームまたは春のセキュリティを使用して、自動的にログインフォームを生成していますか? –

答えて

1

私が気づいた問題は、SecurityConfigurationの場所(またはパッケージ)でした。

@ComponentScan注釈(@SpringBootApplicationの一部として含まれる)は、デフォルトで、定義された同じパッケージ内のコンポーネントをスキャンします。

したがって、2つのソリューションがあります。a)注釈)は、Bを定義しますが、私の場合は、コンフィギュレーション

を配置パッケージ内のコンポーネントをスキャンするために注釈を設定した同じパッケージに設定を移動し、上記のSecurityConfigurationファイルは、私のアプリケーションクラスとは異なるパッケージに入っていました。

ソリューション:セキュリティの構成となっているパッケージの名前で

@ComponentScan({"<security-package-name>"}) 

とプラグ:

次の注釈を含めます。

溶液B

移動アプリケーションクラスと同じパッケージにJava設定クラス。

関連する問題