我有弹簧安全弹簧(3.2.3,因此没有CSRF保护)和角度。
在控制器中,我有一个像这样的方法来更新用户pw:
@RequestMapping("/accountinfo/password", method = arrayOf(RequestMethod.PUT))
@ResponseBody
@Secured("ROLE_USER")
open fun updateOwnPassword(user: User, @RequestBody password: String) {
val editedUser = user
editedUser.password = encoder.encode(password)
userRepository.save(editedUser)
}
请求通过角度服务完成:
function changeOwnPassword(newPassword) {
return $http
.put('accountinfo/password', newPassword)
.then(function (response) {
return response.data
});
}
这在我测试的每个浏览器中都能正常工作。除非在Citrix环境中使用IE 11.0.35(在其外部工作,但看不到任何特定配置)。 在那种情况下,我在请求上得到403。当我将方法更改为POST时,它再次正常工作。我可以为我遇到这个问题的每个功能做到这一点,但这似乎不是一个干净的解决方案。
就我的研究而言,我认为浏览器写入请求的方式有问题,但那是我无法找到该做什么。
编辑: 我比较了Citrix内部和外部的IE 11.0.35的请求标头,它们看起来完全一样。唯一的区别是工作版本在User-Agent属性中使用DNT = 1和非工作版本作为WOW64?
更新: 我发现它也发生在DELETE
答案 0 :(得分:0)
发现问题:客户端通过一个不喜欢PUT和DELETE的附加代理发送请求,只是从中删除会话cookie。我们正在解决将来将令牌放入标题的问题。