Как внести в белый список только подпуть защищенного пути весной? - PullRequest
0 голосов
/ 06 ноября 2018

Я использую spring-boot-starter-security, который по умолчанию автоматически защищает все мои @GetMapping остальные конечные точки.

Вопрос: как я могу указать только белый список подпути, который не должен защищаться?

Я пытался так:

@Configuration
public class DocumentsSecurityConfiguration implements WebSecurityConfigurer<WebSecurity> {
    @Override
    public void init(WebSecurity builder) { }

    //should allow unauthenticated access
    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/documents/**");
    }
}

НО: корневой каталог localhost:8080/documents должен оставаться защищенным. Только подпути, такие как /documents/123, должны оставаться открытыми.

Проблема: когда я теперь получаю доступ к корневому пути /documents, он больше не защищен.

Мой AntMatcher не так?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я думаю, что-то вроде этого:

@Configuration
@EnableWebSecurity
@Order(SecurityProperties.BASIC_AUTH_ORDER)
@Slf4j
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private static final String[] AUTH_WHITE_LIST = {
        // swagger-ui
          "/v2/api-docs"
        , "/swagger-resources"
        , "/swagger-resources/**"
        , "/configuration/security"
        , "/swagger-ui.html"
        , "/webjars/**"
        , "/security/**"
        // spring actuator
        , "/actuator"
        , "/actuator/**"
    };

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.anonymous().and()
                .authorizeRequests().antMatchers(AUTH_WHITE_LIST).permitAll();
    }
}

И, пожалуйста, позаботьтесь о Порядке, безопасность пружин основана на файлах, и в основном порядок важен. Если какой-либо другой сопоставитель отклонит запрос, он не получит этот конфиг.

Для упомянутой вами проблемы,

Я думаю, что вы должны написать собственный фильтр, чтобы справиться с этим. разрешить только "/ documents" с некоторым дополнительным путем, но прекратить доступ "/documents".

Я лично предлагаю вам изменить дизайн URL, может быть, в этой ситуации изменить его на "/ documents / all" лучше, чем "/ documents"? хотя это немного противоречит остальным учебникам в Интернете.

Код взят из одного из моих проектов, но некоторая не относительная часть была удалена. Надеюсь, это поможет.

0 голосов
/ 06 ноября 2018

Это поведение является оптимизацией, см. AntPathRequestMatcher:

Использование значения шаблона /** или ** рассматривается как универсальное совпадение, которое будет соответствовать любому запросу. Шаблоны, которые заканчиваются на /** (и не имеют других подстановочных знаков), оптимизируются с использованием совпадения подстроки - шаблон /aaa/** будет соответствовать /aaa, /aaa/ и любым подкаталогам, таким как /aaa/bbb/ccc.

Есть несколько возможных способов решения вашей проблемы:

...