我正在使用AngularJS和Spring (4.1.0.RELEASE)构建一个Web应用程序,一切都运行良好,现在我想将Spring Security(3.2.5.RELEASE)添加到项目中,以对所有请求进行身份验证和授权。由于我使用的是Angular,所有的视图都是静态的,从未由服务器呈现。因此,典型的Spring Security设置(带有登录jsp)将无法工作。我查看了许多示例,没有一个符合我的需求。我不想使用任何外部框架(如Jersey)来帮助进行身份验证,也不想使用任何服务器呈现的视图,例如jsp。
当我开启Spring Security后,我的GET请求仍然正常工作,但我的POST请求,例如我的登录请求,不再工作,并返回404错误。控制器正确映射,URL有效,所以我知道这一定与Spring Security拦截请求并认为其无效有关。我不确定为什么,但我认为这可能与请求没有正确的头信息和Spring的跨站请求伪造保护有关。我不想禁用此保护。我的问题是,如何使用Spring Security定义自定义登录URL,以对我的登录POST请求进行身份验证,并发送回所有必要的头信息以启用未来的身份验证请求?
编辑:我已经成功使URL工作。是否有方法从ajax调用中检索CSRF令牌?我的所有视图都是静态的,服务器首先在登录请求上被访问,因此没有JSP,也没有通过jsp标记库从服务器获取csrf令牌的方法。第一个答案中的建议假设我们在JSP上,但这并不是事实。是否有办法允许CSRF保护,或者我需要禁用它并执行自己的请求验证?
当我开启Spring Security后,我的GET请求仍然正常工作,但我的POST请求,例如我的登录请求,不再工作,并返回404错误。控制器正确映射,URL有效,所以我知道这一定与Spring Security拦截请求并认为其无效有关。我不确定为什么,但我认为这可能与请求没有正确的头信息和Spring的跨站请求伪造保护有关。我不想禁用此保护。我的问题是,如何使用Spring Security定义自定义登录URL,以对我的登录POST请求进行身份验证,并发送回所有必要的头信息以启用未来的身份验证请求?
编辑:我已经成功使URL工作。是否有方法从ajax调用中检索CSRF令牌?我的所有视图都是静态的,服务器首先在登录请求上被访问,因此没有JSP,也没有通过jsp标记库从服务器获取csrf令牌的方法。第一个答案中的建议假设我们在JSP上,但这并不是事实。是否有办法允许CSRF保护,或者我需要禁用它并执行自己的请求验证?