2017-10-18 11 views
0

要求を処理しません。ログインに成功する工程の後、私はこのリクエストURLにauthorizeRequests、バインド「v_main」役割の中で宣言しているページ/メイン/リストにユーザーをリダイレクトしています。しかし、私の設定の下に私が宣言しているページをACCESS_DENIEDに戻り宣言としてaccessDeniedPageWebSecurityConfigurerAdapterのcofigurationは、私がWebSecurityConfigurerAdapterを実装するクラスを宣言している正しく

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class AppSecurityConfig extends WebSecurityConfigurerAdapter { 
    protected static Logger log = Logger.getLogger(AppSecurityConfig.class); 

    @Autowired 
    private CustomAuthenticationProvider authProvider; 


    @Autowired 
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception { 
     log.info("configAuthentication"); 
     auth.authenticationProvider(authProvider); 
    } 

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

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     log.info("configure HttpSecurity");  

     http 
       .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .loginProcessingUrl("/login") 
       .usernameParameter("username").passwordParameter("password") 
       .defaultSuccessUrl("/main/list") 
       .failureUrl("/login?fail=1") 
       .and() 
      .authorizeRequests() 
       .antMatchers("/main/**").hasRole("v_role") 
       .anyRequest().authenticated() 
       .and() 
      .logout() 
       //.logoutUrl("/logout") 
       .logoutSuccessUrl("/login?logout") 
       .invalidateHttpSession(true) 
       .and() 
      .exceptionHandling() 
       .accessDeniedPage("/access_denied") 
       .and() 
      .csrf(); 
    } 

私の答え私はそれがhasAuthorityにhasRoleもを変更した必要なもの

.antMatchers("/main/**").hasAuthority("v_main") 

私はSimpleGrantedAuthority

答えて

1

と役割を設定していますので、この問題が発生した主な理由は、このユーザーのすべてのロールを印刷して、理想的には、ユーザーことがわかります場合は、ユーザーのdoesntのが役割 を持っているということですこの役割はありません。あなたは、あなたが他のそれらをすることができます追加しながら自分の役割にプレフィックスROLE_を追加する必要があります動作するように)(hasRoleもためには、その後の春4を使用している場合は : あなたは

for (GrantedAuthority ga : SecurityContextHolder.getContext().getAuthentication().getAuthorities()) { 
     log.info("\t\t\t" + ga.getAuthority() + "\t" + request.isUserInRole(ga.getAuthority())); 
    } 

UPDATE下に与えられた何かを確認することができますhasAuthority()を使用します。 のでhasAuthority('ROLE_ADMIN')hasRole('ADMIN')

+0

と同じ意味を返信いただきありがとうございます。私は、私のCustomAuthenticationProviderでAuthenticationProviderを実装する役割を設定しています。認証メソッドでは、私はuserにロールを設定しています。ところで、私はあなたのコードをテストし、それは私に正しい役割を返します – AEMLoviji

+0

あなたはありません申し訳ありません – Mudassar

+0

をチェックしているそのロールのrequest.isUserInRole(ga.getAuthority()))真ありません。私はちょうどそれが何を返しますそれをテストしました。それは私がユーザーに設定した役割を私に返します。しかし、あなたが言ったように、isUserInRoleはtrueを返しません。そして何が問題なの? – AEMLoviji

関連する問題