2016-12-30 2 views
0

У меня есть/my-app/login url, и я хочу разрешить для этого URL. Но эта страница находится под шаблоном/my-app/**, который разрешает доступ только для зарегистрированного пользователя.Весеннее разрешение безопасностиВсе() для одного URL под некоторым шаблоном

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 

       .csrf().disable() 
       .authorizeRequests() 
        .antMatchers("/my-app/**").access("hasRole('USER')") 
        .and() 
       .httpBasic() 
       .authenticationEntryPoint(entryPoint()); 
    } 

Как это сделать?

ответ

0

Добавить .antMatchers("/my-app/login").permitAll() ДО .antMatchers("/my-app/**").... Сопровождающие запросы хранятся в списке (упорядочены по порядку, в котором они определены), а Spring Security будет использовать первое правило, которое соответствует совпадению с текущим запросом. Поэтому сначала ставьте наиболее конкретные и общие правила.

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 

      .csrf().disable() 
      .authorizeRequests() 
       .antMatchers("/my-app/login").permitAll() 
       .antMatchers("/my-app/**").access("hasRole('USER')") 
       .and() 
      .httpBasic() 
      .authenticationEntryPoint(entryPoint()); 
} 

Если my-app это имя вашего приложения, и, следовательно, URL, что на сервере приложений (Tomcat) к карте URL-адрес для приложения, то вы должны ommit его в antMatcher потому что antMatcher сконфигурирован "только" относительная URL приложения: /my-app/login стать /login и /my-app/** стать /**

добавить .anyRequest().permitAll(), как последний "Искателя" из authorizeRequests()

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 

      .csrf().disable() 
      .authorizeRequests() 
       .antMatchers("/my-app/**").access("hasRole('USER')") 
       .anyRequest().permitAll() 
       .and() 
      .httpBasic() 
      .authenticationEntryPoint(entryPoint()); 
} 

Но если честно: вы используете какой-либо черный список (разрешите все URL-адреса, за исключением некоторых черных) - и это не рекомендуется (с определенной точки зрения безопасности). Потому что, если вы забыли добавить или пропустить один URL-адрес, который должен быть защищен, он доступен для каждого органа. Более безопасный способ - отказать каждому URL-адресу и разрешить только некоторые (белый список).

+1

Не было бы приятно просто добавить .И(). AuthorizeRequests(). AntMatchers ("/ мой-приложение/Логин"). PermitAll()»для входа в систему и добавить denyAll() в конце ? –

+0

@amant: вы правы, я неправильно понял вопрос. Поэтому я изменил ответ. – Ralph

Смежные вопросы