2013-08-09 6 views
15

Ich benutze die Spring-Security-JavaConfig-Bibliothek für die Feder Sicherheit. Wenn ich XML-Konfigurationsdateien verwendet haben, würde ich so etwas wie dieses verwenden, um eine benutzerdefinierte Zugriff verweigert Seite zu definieren:Wie füge ich einen Zugriff verweigert Handler in Spring-Sicherheit-javaconfig

<http auto-config="true"> 
    <intercept-url pattern="/admin*" access="ROLE_ADMIN" /> 
    <access-denied-handler ref="accessDeniedHandler"/> 
</http> 

Hier ist die Klasse meine Sicherheitskonfiguration so weit:

@Configuration 
@EnableWebSecurity 
public class SecurityConfigurator extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void registerAuthentication(AuthenticationManagerBuilder auth) 
      throws Exception { 
     auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
     auth.inMemoryAuthentication().withUser("admin").password("password").roles("ADMIN"); 

    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeUrls().antMatchers("/admin").hasRole("ADMIN"); 
    } 
} 
+1

Beachten Sie, dass das mehrfache Aufrufen von inMemoryAuthentication() mehrere InMemoryUserDetailsManager-Instanzen erstellt. Wenn Sie nicht alle Methoden verketten möchten, können Sie den Aufruf von auth.inMemoryAuthentication() in einer Variablen speichern. Oder Sie können die Methodenverkettung als Umriss in den Beispielen https://github.com/SpringSource/spring-security-javaconfig/blob/master/samples-web.md#sample-web-security-spring-java-config verwenden –

Antwort

30

nehme an, ich sollte dies Führen Sie den folgenden Trick aus:

HttpSecurity http = ... 
http.exceptionHandling().accessDeniedHandler(myAccessDeniedHandler);