Синхронизация магазина ExtJS с Spring Security включена
Я новичок в Spring Security, и я добавил его в свой проект. Все, кажется, работает идеально войти/выйти и даже навигации по экранам. Только когда я попытался создать сетку ExtJS и добавил запись в хранилище, а затем вызвал метод sync() хранилища, я получил -
Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
Я знаю, что мне нужно передать _csrf с просьбой, но я хотел бы узнать от всех вас о лучшем способе сделать это. Пожалуйста помочь.
Как я могу передать этот _csrf с все AJAX (create/update/delete/read) автоматически при вызове метода sync() в магазине?
Конфигурация Безопасности
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Autowired
private BCryptPasswordEncoder encoder;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(encoder);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/**").access("hasRole('ROLE_ADMIN')").and().formLogin().and().csrf();
}
}
Код ExtJS
tbar : [ '->', {
text : 'Add',
handler : function(btn) {
var grid = btn.up('grid');
var editor = grid.findPlugin('rowediting');
grid.getStore().insert(0, {});
editor.startEdit(0, 0);
}
} ],
bbar : [ '->', {
text : 'Save',
handler : function(btn) {
btn.up('grid').getStore().sync();
}
} ],
Спасибо!
2 ответа:
Если вы хотите использовать CSRF, вам не нужно делать это весной. Лучше использовать менее инвазивный метод OWASP. В вашем указателе.jsp или индекс.html, где вы включаете свой код ExtJS, вы можете включить csrfguard 3 crsf injection , который приведет к тому, что CRSF будет введен в любой запрос AJAX. Чтобы включить CSRF весной, вы просто установите что-то вроде следующего в вашей весенней конфигурации:
@Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); }
Или в вашем случае:
@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/**").access("hasRole('ROLE_ADMIN')") .and().formLogin() .and().csrf().disable(); }