2016-07-12 6 views
1

Die Aufgabe besteht darin, eine Webanwendung zu erstellen, auf die von verschiedenen Benutzern mit unterschiedlichen Rollen zugegriffen werden sollte. Einige Rollen sehen alle Seiten, manche nur wenige.Java Spring Security nicht erkannte Rollen

Ich habe die folgende Konfiguration für die SecurityConfig, aber es funktioniert nicht.

@Configuration 
@EnableWebSecurity 
@Import(value = { SecurityWebApplicationInitializer.class }) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    DataSource dataSource; 

    @Autowired 
    private AuthenticationService authenticationService; 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     Md5PasswordEncoder encoder = new Md5PasswordEncoder(); 
     auth.userDetailsService(authenticationService).passwordEncoder(encoder); 
    } 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/assets/**"); 
    } 

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

    http.authorizeRequests() 
    .antMatchers("/login", "/page1").permitAll() 
    .antMatchers("/**").access("hasRole('RADMIN')") 
    .antMatchers("/login", "/page2").access("hasRole('ADMIN')") 
    .antMatchers("/page2").hasAnyRole("RADMIN", "ADMIN") 
    .and().formLogin() 
    .and().exceptionHandling().accessDeniedPage("/403"); 

    } 

} 

Ich habe versucht, hasAnyRole()-hasAnyAuthority() ändern, keine Wirkung. So ziemlich jede Änderung, die ich mache, lässt entweder ADMIN nicht einloggen (er sieht nur/403 oder/404) oder lässt irgendjemanden, autorisiert oder nicht, alles sehen.

+0

Standard Federsicherheitsbehörden mit 'ROLE_' beginnen, so sollten diese' sein ROLE_RADMIN' und 'ROLE_ADMIN', es sei denn, Sie haben Ihren eigenen [' AccessDecisionVoter'' definiert (http://docs.spring.io/autorepo/docs/spring-security/4.1.0.RELEASE/apidocs/org/springframework/security/access/ AccessDecisionVoter.html). – Andreas

+0

Versucht, kein Unterschied ... – mariobgr

+0

Sie haben überprüft, dass 'ROLE_ADMIN' dem Benutzer zugewiesen wurde, richtig? – Andreas

Antwort

0

Ich verwende Spring-Security 4.0.1.RELEASE und es gibt zwei wichtige Tabellen, die users und authorities sind. Die Tabelle authorities sollte genau zwei Spalten haben (Benutzername, Autorität) und die Rolle sollte mit dem Präfix ROLE_ z.B. ROLE_ADMIN & ROLE_RADMIN wie Andreas wies darauf hin.

Versuchen Sie, Ihre Authentifizierung einfach wie unten zu halten und zu sehen, macht es einen Unterschied, dann fügen Sie die zusätzlichen Seiten und die Rollen, z.

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

     http.authorizeRequests(). 
     anyRequest().authenticated().and().formLogin().loginPage("/login.html") 
     .loginProcessingUrl("/login").permitAll().and().logout().logoutSuccessUrl("/") 
     .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll().and().exceptionHandling() 
     .accessDeniedPage("/403.html"); 
    } 
1

Nun ... das Problem war so dumm wie es nur geht.

Scheint, wie mit einem der Commits wurde der Name der Datenbank, so verändert es keine Rolle (ROLE_NONE) war zu authentifizieren ...

Verwandte Themen