Spring Security不支持请求方法“POST”

时间:2014-07-14 04:43:46

标签: java jquery ajax spring spring-mvc

我在Spring Security中处理AJAX请求时遇到了麻烦。

spring security配置是(Java config):

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/themes/**").permitAll() 
                .anyRequest().access("hasRole('ROLE_USER')")
                .antMatchers("/offerings/**").access("hasRole('ROLE_ADMIN')")
                .antMatchers("/users").access("hasRole('ROLE_ADMIN')")
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logout")
                .deleteCookies("JSESSIONID")
                .invalidateHttpSession(true)
                .permitAll()
                .and()
            .csrf();
    }

AJAX句柄

@RequestMapping(value = "/user/edit", method = RequestMethod.POST)
public ModelAndView edit(@RequestParam Map<String, String> allRequestParams) {
    ...
}

AJAX JS代码

$.ajax({
    url: '/user/edit',
    type: 'POST',
    ...
});

如果我在Spring配置中禁用csrf,那么一切都会正常工作csrf().disable()。那么在启用csrf时如何处理AJAX请求。

1 个答案:

答案 0 :(得分:1)

我找到了答案。发送AJAX请求时,只需在数据中再添加一个参数为“_csrf”令牌密钥。