2016-12-02 2 views
2

Я сейчас борюсь с основами Spring Security.Весенняя безопасность с весенней загрузкой: разрешение доступа неавторизованного пользователя к конкретным конечным точкам при использовании фильтра

То, что я хочу достичь

Моя система только для обработки REST API, есть Войти конечная точка POST на /user/sign_in и несколько открытых конечных точек - GET на /prompt/, /prompt/{id}, /story/, /story/{id}, остальное все только для авторизованных пользователей.


У меня есть пользовательская аутентификация фильтр, который я поставил перед BasicAuthenticationFilter. Я делюсь своим WebSecurityConfigurerAdapter код здесь

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private DemoAuthenticationProvider demoAuthenticationProvider; 

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

     http.authorizeRequests() 
       .antMatchers(HttpMethod.GET, "/version", "/story", "/prompt").permitAll() 
       .antMatchers(HttpMethod.POST, "/user/sign_in").permitAll() 
       .anyRequest().authenticated() 
       .and() 
       .addFilterBefore(new DemoAuthenticationFilter(), BasicAuthenticationFilter.class); 
     http.csrf().disable(); 
    } 

    @Override 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(demoAuthenticationProvider); 
    } 
} 

Для анонимного пользователя для открытых конечных точек, я возвращаю пустой маркер аутентификации в фильтре, и я получаю

403 Доступ запрещен

Зачем нужен токен аутентификации, когда я упоминал, чтобы разрешить все, а не просто аутентифицироваться для этих конечных точек? И как мне его правильно реализовать?

ответ

1

Мой плохой!

Конечные точки spring-boot = запрос отображения контроллера + запрос отображения метода. Описанные мною GET отображаются в /. При смене на

.antMatchers(HttpMethod.GET, "/version/", "/story/", "/prompt/").permitAll() 
       .antMatchers(HttpMethod.POST, "/user/sign_in/").permitAll() 

вещи катятся.

3

Это работает для меня:

.and().authorizeRequests().antMatchers("/URL1/**", "/URL2/**").anonymous().anyRequest().authenticated(); 
Смежные вопросы