我在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请求。
答案 0 :(得分:1)
我找到了答案。发送AJAX请求时,只需在数据中再添加一个参数为“_csrf”令牌密钥。