2016-10-23 9 views
0

私はスプリングセキュリティに問題があります。私は3つのロール(ROLE_ADMIN、ROLE_MOD、ROLE_USER)を作成しました。パスワードとユーザー名を使ってデータベース内の役割を維持しています。 JSPでは、すべてのロールに対して3つの異なるメニューを作成しました。すべてのメニューには、 "/ messages"、 "/ profile"、 "/ logout"を繰り返す3行があります。 MODまたはUSERとしてログするとすべて正常に動作しますが、ADMINとしてログすると「/ messages」と「/ profile」にアクセスできなくなります。スプリングセキュリティ - ロールが正しく機能していない

私の設定やJSPで何が問題になっていますか?

セキュリティ設定:JSPの

@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   
} 

フラグメント:

<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'は、' ROLE_'を前面からトリミングします。ある場所では「USER」を使用し、もう一方の場所では「ROLE_USER」を使用しています。 – chrylis

+0

私はそれを変更しましたが、まだ働いていません。 – DEADALICE7000

+0

コンソールログも共有できますか? –

答えて

0

はまあ、私は私の問題を解決するために管理してきました。プロフィール、メッセージ、ログアウトのアクセス権を変更しました。これですべての認証済みユーザーがアクセスできます。

@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  
} 
関連する問題