Spring + Angular / IE在PUT上获得403(其他人没有)

时间:2016-10-30 15:25:02

标签: angularjs spring spring-mvc put http-status-code-403

我有弹簧安全弹簧(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

1 个答案:

答案 0 :(得分:0)

发现问题:客户端通过一个不喜欢PUT和DELETE的附加代理发送请求,只是从中删除会话cookie。我们正在解决将来将令牌放入标题的问题。