2016-08-30 3 views
0

私はREST APIを公開する簡単なSpringブートアプリケーションを持っています。 @PreAuthorize( "hasRole( 'ROLE_4')")アノテーションを使用して、残りのAPIのすべてのメソッドをROLEに従って保護するためのスプリングセキュリティを正しく設定しました。Spring Security:@PreAuthorizeが指定されていない場合、デフォルトでリクエストを拒否する方法

私は気付きました@PreAuthorize注釈をまったく入れないと、フレームワークは認証されたユーザーにこの要求を許可します。私はこの振る舞いを逆にしたい。したがって、プログラマの1人が@PreAuthorizeアノテーションを追加することを忘れると、このメソッドに対するリクエストは自動的に拒否されます。ここで

は私の設定です:

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

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

    //Disable HTTP Basic authentication 
    http.httpBasic().disable(); 

    //Add the filters 
    http.addFilterBefore(new AuthenticationFilter(authenticationManager()), BasicAuthenticationFilter.class); 
} 

@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.authenticationProvider(securityServiceAuthenticationProvider()); 
} 


@Bean 
public AuthenticationProvider securityServiceAuthenticationProvider() { 
    return new SecurityServiceAuthenticationProvider(); 
} 

} 

おかげ ガイHudara

答えて

0

あなたはMethodSecurityInterceptorを使用することができます。サンプルXML構成はhereです。この例では、単一のBeanにセキュリティを適用していますが、式は非常に柔軟性があります。名前が「Controller」で終わるすべてのクラスのパブリックメンバー。これまでも同様のXML構成を使用していますが、Java構成ではこれを実行していません。私はあなたがJavaの設定で同じことをすることができると思います。

+0

ありがとうございました。私はこれを試してみる。 –

0

カスタムAccessDecisionManagerを指定し、照会されたオブジェクトがMethodInvocationの場合は、@PreAuthorizeアノテーションがあるかどうかを確認します。はいの場合は合格とします。それ以外の場合は、失敗します。これを設定に追加することができます:http.authorizeRequests().accessDecisionManager(myManager)

+0

ありがとうございます。私はそれを試した。私は次のconfogurationを使用しました:**。authorizeRequests()。accessDecisionManager(accessDecisionManager())。anyRequest()。authenticated(); **しかし、** MethodInvocation **ではなく** FilterInvocation **を取得します。私はSpring Securityには新しく、このフレームワークを完全に理解していないことを認めなければなりません。 –

関連する問題