403拒绝使用Spring Security访问

时间:2016-11-23 18:58:17

标签: spring spring-security

我使用Spring构建应用程序,并使用了Spring Security。问题是我无法使用authorizeRequests链做到正确。我有3个角色:

ROLE_RH可以使用上下文RH

访问视图

ROLE_GP可以使用上下文GP

访问视图

ROLE_SUPER可以访问所有视图,包括上下文RH和GP

我的authorizeRequests链如下所示:

    http.authorizeRequests()
        .antMatchers("/bootstrap/**", "/dist/**", "/plugins/**").permitAll()
        .antMatchers("/RH/**").hasRole("RH")
        .antMatchers("/GP/**").hasRole("GP")
        .antMatchers("/**").hasRole("SUPER")
        .and()
    .formLogin()
        .failureUrl("/login?error")
        .loginPage("/login").usernameParameter("nombreUsuario").passwordParameter("contrasena")
        .defaultSuccessUrl("/default")
        .and()
    .logout()
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        .logoutSuccessUrl("/login")
        .permitAll()
        .and().csrf()
        .and().exceptionHandling().accessDeniedPage("/403");

但是当我以ROLE_SUPER身份登录时,我无法访问RH和GP视图,我每次都会拒绝访问。 我尝试将ROLE_SUPER的.antMatcher更改为此

.antMatchers("/GP/**","/RH/**","/DB/**").hasRole("SUPER")

当我尝试以ROLE_GP或ROLE_RH身份登录时,我的访问权限也被拒绝了。 角色不能共享相同的上下文?当ROLE_SUPER工作时,ROLE_GP和ROLE_RH不相反,反过来。我做错了什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我做了一些研究和解决方案对我有用:

http.authorizeRequests()
        .antMatchers("/bootstrap/**", "/dist/**", "/plugins/**").permitAll()
        .antMatchers("/DB/**").hasRole("SUPER") 
        .antMatchers("/RH/**").access("hasRole('ROLE_SUPER') or hasRole('ROLE_RH')")
        .antMatchers("/GP/**").access("hasRole('ROLE_SUPER') or hasRole('ROLE_GP')")