【发布时间】:2015-01-17 08:11:55
【问题描述】:
我正在开发一个使用 AngularJS 和 Spring (4.1.0.RELEASE) 作为后端的 Web 应用程序。目前一切都很好。现在功能已经完成,我想将 Spring Security (3.2.5.RELEASE) 添加到项目中,以进行身份验证,然后授权所有请求。当我使用 Angular 时,我所有的视图都是静态的,并且从不被服务器渲染。因此,典型的 Spring Security 设置(带有登录 jsp)将不起作用。我看过很多例子,没有一个符合我的需要。我不想使用任何外部框架(例如 Jersey)来帮助进行身份验证,也不想使用任何服务器呈现的视图,例如jsps。
当我启用 Spring Security 时,我的 GET 请求仍然可以正常工作,但我的 POST 请求(例如我的登录请求)不再有效,并返回 404 错误。控制器已正确映射,并且 URL 有效,所以我知道它必须与 Spring Security 拦截请求并认为它无效有关。我不确定这是为什么,但我认为这可能与没有正确标头的请求和 Spring 的 CSRF 保护有关。我不想禁用此保护。我的问题是,如何使用 Spring Security 定义自定义登录 url,它将验证我的登录 POST 请求,然后发回所有必要的标头以启用未来的经过身份验证的请求?
编辑:我已经得到了工作的网址。有没有办法从 ajax 调用中检索 CSRF 令牌?我的视图都是静态的,服务器首先点击登录请求,所以没有jsps,也没有办法通过jsp标签库从服务器获取csrf token。第一个答案中的建议假设我们在 jsp 上,但事实并非如此。有什么方法可以允许 CSRF 保护,还是我需要禁用它并执行我自己的请求验证?
【问题讨论】:
-
我自己也在寻找您问题的答案。感谢您在这里发帖!
-
听起来你调用 Post 方法的方式可能有问题,你能显示你正在使用的代码吗?
-
这些方法在添加 Spring Security 之前运行良好,所以我知道这与这些无关。这和 Spring Security 有关系
标签: java angularjs spring rest spring-security