我正在尝试为资源提供基于角色的授权。如果我这样做,它可以用于角色
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.requestMatcher(new OrRequestMatcher(
new AntPathRequestMatcher("/hello"),
new AntPathRequestMatcher("/user")
))
.authorizeRequests()
.anyRequest().access("#oauth2.hasScope('read')");
}
@Override
public void configure(ResourceServerSecurityConfigurer resources)
throws Exception {
resources.resourceId("openid");
}
}
如果我使用以下方法,它将无法用于测试资源。
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.requestMatcher(new OrRequestMatcher(
new AntPathRequestMatcher("/hello"),
new AntPathRequestMatcher("/user")
))
.authorizeRequests()
.antMatchers("/test").hasRole("ADMIN")
.anyRequest().access("#oauth2.hasScope('read')");
}
它完全忽略了基于令牌的授权。我该如何实现呢?我得到的另一个问题是,如果我删除requestMatcher
阻止,Oauth客户端无法获取授权代码,在将用户凭据提交到登录表单后,它会再次重新加载登录页面。但是使用前面的代码块,它可以正常工作。我在这里做错了什么?
这是我的安全配置类
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**").permitAll()
.antMatchers("/js/**").permitAll()
.antMatchers("/img/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.defaultSuccessUrl("/hello")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout");
}
}
答案 0 :(得分:0)
在spring中使用角色时,必须使用前缀ROLE(例如ROLE_ADMIN)才能使其使用默认设置。