2015-03-19 4 views
2

Я пытался включить CSRF фильтр для какой-то конкретной апи вызова и для других нет необходимости CSRF filter.What я сделал неSpring загрузки CSRF фильтр

@Override 

protected void configure(HttpSecurity http) throws Exception { 

    http.csrf().disable().authorizeRequests().antMatchers("/public/**").permitAll(); 
    http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint); 
    http.csrf().disable().addFilterBefore(new StatelessCSRFFilter(), CsrfFilter.class).authorizeRequests().antMatchers("/rest/**").permitAll(); 
} 

Проблема заключается в том, когда я звоню Localhost: 8080/открытый/привет

ошибка показывал "сообщение"

: "Отсутствует или несоответствующий CSRF-маркер"

Я использую загрузку Spring и Spring Security.

Спасибо за любую помощь.

ответ

4
http.antMatcher("/public/**").authorizeRequests().anyRequest().permitAll(); 
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint); 
http.antMatcher("/rest/**").addFilterBefore(new StatelessCSRFFilter(), CsrfFilter.class).csrf().disable(); 

Или вы можете сделать вот так. Я думаю, что оба будут работать.

http.antMatcher("/public/**").csrf().disable(); 
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint); 
http.antMatcher("/rest/**").addFilterBefore(new StatelessCSRFFilter(), CsrfFilter.class).csrf().disable(); 
2

Попробуйте изменить http.csrf().disable() на http.antMatcher("/public/**").csrf().disable() и http.antMatcher("/rest/**").csrf().disable(). Вам, вероятно, придется поместить эти две строки в свои собственные WebSecurityConfigurerAdapter.

Это сообщит Spring-Security о создании нескольких цепочек фильтров защиты HTTP (сродни наличию нескольких блоков <http/> в XML-модели).

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