2016-10-23 2 views
0

Ich habe ein Problem mit Spring Security. Ich habe 3 Rollen erstellt (ROLE_ADMIN, ROLE_MOD, ROLE_USER). Ich behalte die Rollen in der Datenbank mit Passwörtern und Benutzernamen. In JSP habe ich 3 verschiedene Menüs für alle Rollen erstellt. In allen Menüs gibt es 3 Zeilen, die "/ messages", "/ profile", "/ logout" wiederholen. Wenn ich als MOD oder USER logge funktioniert alles gut, aber wenn ich als ADMIN logge, kann ich nicht auf "/ messages" und "/ profile" zugreifen.Spring Security - Rollen funktioniert nicht richtig

Was ist falsch mit meiner Konfig oder Jsp?

Sicherheit config:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    //@formatter:off 
    http 
     .authorizeRequests() 
      .antMatchers("/" 
        ,"/tutorials" 
        ,"/search" 
        ,"/about" 
        ,"/contact" 
        ,"/register", 
        "/css/*", 
        "/js/*", 
        "/img/*") 
      .permitAll() 
      .antMatchers(
        "/messages", 
        "/profile", 
        "/logout", 
        "/newsmanager", 
        "/tutorialsmanager", 
        "/usersmanager", 
        "/sendemails" 
        ) 
       .hasRole("ADMIN") 
      .antMatchers(
        "/suggestnews", 
        "/suggesttutorial", 
        "/messages", 
        "/profile", 
        "/logout" 
        ) 
       .hasRole("MOD") 
      .antMatchers(
        "/messages", 
        "/profile", 
        "/logout" 
        ) 
       .hasRole("USER") 
      .and() 
     .formLogin() 
      .loginPage("/login") 
      .defaultSuccessUrl("/") 
      .permitAll() 
      .and() 
     .logout() 
      .permitAll(); 

    //@formatter:on   
} 

Fragment von JSP:

<sec:authorize access="hasRole('ROLE_ADMIN')"> 
     <button class="btn btn-default dropdown-toggle" type="button" 
      id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" 
      aria-expanded="true"> 
      Account <span class="caret"></span> 
     </button> 
     <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> 
      <li><a href="/messages">Messages</a></li> 
      <li><a href="/profile">Profile</a></li> 
      <li role="separator" class="divider"></li> 
      <li><a href="/tutorialsmanager">Tutorials manager</a></li> 
      <li><a href="/newsmanager">News manager</a></li> 
      <li><a href="/usersmanager">Users manager</a></li> 
      <li><a href="/sendemails">Send emails</a></li> 
      <li role="separator" class="divider"></li> 
      <li><a href="javascript:$('#logoutForm').submit();">Log 
        out</a></li> 
     </ul> 
</sec:authorize> 

    <!-- APPEARED FOR ROLE_USER --> 
<sec:authorize access="hasRole('ROLE_USER')"> 
     <button class="btn btn-default dropdown-toggle" type="button" 
      id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" 
      aria-expanded="true"> 
      Account <span class="caret"></span> 
     </button> 
     <ul class="dropdown-menu" aria-labelledby="dropdownMenu2"> 
      <li><a href="/messages">Messages</a></li> 
      <li><a href="/profile">Profile</a></li> 
      <li role="separator" class="divider"></li> 
      <li><a href="javascript:$('#logoutForm').submit();">Log 
        out</a></li> 
     </ul> 
</sec:authorize> 

    <!-- APPEARED FOR ROLE_MOD --> 
<sec:authorize access="hasRole('ROLE_MOD')"> 
     <button class="btn btn-default dropdown-toggle" type="button" 
      id="dropdownMenu3" data-toggle="dropdown" aria-haspopup="true" 
      aria-expanded="true"> 
      Account <span class="caret"></span> 
     </button> 
     <ul class="dropdown-menu" aria-labelledby="dropdownMenu3"> 
      <li><a href="/messages">Messages</a></li> 
      <li><a href="/profile">Profile</a></li> 
      <li role="separator" class="divider"></li> 
      <li><a href="/suggestnews">Suggest a news</a></li> 
      <li><a href="/suggesttutorial">Suggest a tutorial</a></li> 
      <li role="separator" class="divider"></li> 
      <li><a href="javascript:$('#logoutForm').submit();">Log 
        out</a></li> 
     </ul> 
</sec:authorize> 
+0

'hasRole' schneidet die' ROLE_' von der Vorderseite ab. Sie verwenden 'USER' an einer Stelle und' ROLE_USER' an der anderen Stelle. – chrylis

+0

Ich habe es geändert aber immer noch nicht funktioniert. – DEADALICE7000

+0

Können Sie auch das Konsolenprotokoll freigeben? –

Antwort

0

Nun, ich habe es geschafft, mein Problem zu beheben. Ich habe den Zugang für Profil, Nachricht und Abmeldung geändert. Jetzt können alle authentifizierten Benutzer darauf zugreifen.

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

    //@formatter:off 
    http 
     .authorizeRequests() 
      .antMatchers("/" 
       ,"/tutorials" 
       ,"/search" 
       ,"/about" 
       ,"/contact" 
       ,"/register", 
       "/css/*", 
       "/js/*", 
       "/img/*") 
        .permitAll() 
      .antMatchers(
       "/suggestnews", 
       "/suggesttutorial") 
        .hasRole("MOD") 
      .antMatchers(
       "/newsmanager", 
       "/tutorialsmanager", 
       "/usersmanager", 
       "/sendemails" 
        .hasRole("ADMIN") 
      **.antMatchers(
       "/messages", 
       "/profile", 
       "/logout") 
      .authenticated()** 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .defaultSuccessUrl("/") 
       .permitAll() 
       .and() 
      .logout() 
       .permitAll(); 

     //@formatter:on  
} 
Verwandte Themen