在Spring boot / spring security / Angular JS应用程序中..
我试图仅在用户具有指定角色时才允许以下页面。
.antMatchers("/1_reportingEntities/*.html").hasAnyRole(roles)
但即使没有为用户设置该角色,它也允许该页面。 我错过了什么?
Java代码
@Override
protected void configure(HttpSecurity http) throws Exception {
String roles [] = new String[] {"ROLE_EDITOR", "ROLE_AUTHORISER" };
http.httpBasic()
.and()
.authorizeRequests()
// Permit these resources
.antMatchers("/login", "/4_security/login.html", "/bower_components/**", "/0_common/*.html", "/1_reportingEntities/*.js",
"/2_dataCollections/*.js", "/3_calendar/*.js", "/4_security/*.js", "/")
.permitAll()
// All other requests needs authentication
.anyRequest().authenticated()
// Allow only if has certain roles
.antMatchers("/1_reportingEntities/*.html").hasAnyRole(roles)
.and()
// CSRF protection
.csrf().csrfTokenRepository(csrfTokenRepository()).and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
// Enable https
http.requiresChannel().anyRequest().requiresSecure();
}
答案 0 :(得分:3)
我想问题是Spring。您需要为hasAnyAuthority()更改hasAnyRole()。
答案 1 :(得分:0)
Spring 会在检查 ROLE_
时自动添加前缀 hasAnyRole
,而 hasAnyAuthority
不会。
因此,在您使用 hasAnyRole({"ROLE_EDITOR", "ROLE_AUTHORISER" })
的示例中,Spring 实际上会检查您的用户是否具有 {"ROLE_ROLE_EDITOR", "ROLE_ROLE_AUTHORISER" }
中的任何一个角色。
您可以使用 hasAnyRole({"EDITOR", "AUTHORISER"})
,它会检查您的用户是否已被授予 {"ROLE_EDITOR", "ROLE_AUTHORISER"}
,或者您可以继续指定 {"ROLE_EDITOR", "ROLE_AUTHORISER" }
但使用 hasAnyAuthority.