Spring Security的HttpSecurity配置没有达到预期的效果

时间:2016-12-02 10:03:29

标签: java spring-security

我正在努力使用HttpSecurity配置。

以下配置是我想要实现的目标:

  • 路径“/ **”,访问规则: [{所有人,GET}]

  • 路径“/ rest / metadata **”,访问规则: [{Everyone,GET},{ROLE_ADMIN,所有HTTP方法}] < / p>

  • 路径:“/ rest / **”,访问规则: [{未经身份验证,仅限GET},{已验证,所有Http方法}] < / p>

  • 路径:“/ *”(网络资源,登录),访问规则: [{所有人,所有Http方法}]

    < / LI>

出于这些要求,我在Spring Security中进行了以下配置:

@Configuration
@EnableWebSecurity
public class SctSecurityConfig extends LdapSecurityConfig {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/**").permitAll()
                .and()
            .authorizeRequests()
                .antMatchers("/rest/metadata**").hasAuthority(UserRole.ADMIN.name())
                .and()
            .authorizeRequests()
                .antMatchers("/rest/**").authenticated()
                .and()
            .authorizeRequests()
                .antMatchers("/*").permitAll()
                .and()
            .csrf().disable()
            .formLogin().disable()
            .logout().disable();
    }
}

经过身份验证和未经身份验证的访问的安全上下文通常可以正常工作。 除了.hasAuthority(UserRole.ADMIN.name())的规则被忽略之外。我也可以在/rest/metadata**上使用没有该角色的经过身份验证的用户进行PUT / POST等操作。我的理解是,这些请求应该过滤掉该规则。为什么不这样呢?

0 个答案:

没有答案