某些URL的Spring Security授权并拒绝所有其他URL

时间:2016-12-27 13:09:11

标签: java spring spring-boot spring-security

我有以下配置类,我想授权某些请求并拒绝所有其他请求。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .httpBasic()
                .and()
            .authorizeRequests()
                .antMatchers("/phx-config-rest/dev/master").hasRole("DEV")
                .anyRequest().authenticated()
                .and()
            .csrf()
                .disable();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.
            inMemoryAuthentication()
                .withUser("devuser")
                .password("dev")
                .roles("DEV"); 
    }
}

根据此代码我的印象是,Spring只允许我使用用户' devuser'来访问/ phx-config-rest / dev / master。如果我尝试访问/ phx-config-rest / prod / master或任何其他URL,请求将被视为未授权访问。顺便说一句,这段代码是关于Spring云配置服务器的。有什么想法?

2 个答案:

答案 0 :(得分:4)

更改

.anyRequest().authenticated()

 .anyRequest().denyAll()

答案 1 :(得分:3)

您只将网址/phx-config-rest/dev/master限制为具有角色DEV的用户,但是对于具有任何角色的每个登录用户(包括用户devuser),都可以访问所有其他网址, 见ExpressionUrlAuthorizationConfigurer.AuthorizedUrl#authenticated

  

指定任何经过身份验证的用户都允许使用URL。

您必须使用ExpressionUrlAuthorizationConfigurer.AuthorizedUrl#denyAll代替authenticated

  

指定任何人都不允许使用网址。