我使用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不相反,反过来。我做错了什么?
提前感谢您的帮助。
答案 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')")