具有Spring Security ON的ExtJS Store SYNC

时间:2014-12-26 07:55:56

标签: spring security extjs sync

我是Spring Security的新手,我已将其添加到我的项目中。一切似乎都完美地登录/注销,甚至可以在屏幕上导航。只有当我尝试使用ExtJS网格并在商店中添加记录然后调用商店的 sync()方法时,我才得到 -

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

我知道我需要在请求时传递_csrf,但我想向大家介绍完成此操作的最佳方法。请帮忙。

当调用商店中的sync()方法时,如何自动将此_csrf与所有AJAX(创建/更新/删除/读取)一起传递?

安全配置

@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 个答案:

答案 0 :(得分:0)

如果你想使用CSRF,你不必在春天这样做。而是使用侵入性较小的OWASP方法。在包含ExtJS代码的index.jsp或index.html中,您可以包含CSRFGuard 3 CRSF injection,这将导致在任何AJAX请求中注入CRSF。 要在春季启用CSRF,只需在Spring配置中设置如下内容:

  @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();
  }

答案 1 :(得分:0)

您可以在所有标题中包含CSRF令牌:

Ext.Ajax.defaultHeaders = {ctoken: token};

在服务器端,从标头获取令牌并匹配会话令牌。