AngularJS和Spring Security。如何使用Spring Security处理AngularJS Urls

时间:2013-07-17 16:51:32

标签: spring url angularjs spring-security

让我解释一下我的问题。 我在AngularJS中实现了一个可以这样访问的站点:

http://localhost:8080/example/resources/#/

这里我们可以调用不同的页面,例如登录页面:

http://localhost:8080/example/resources/#/login

管理页面:

http://localhost:8080/example/resources/#/admin

用户页面:

http://localhost:8080/example/resources/#/user

现在,我已在示例中实现了spring security,以便捕获每个调用并检查它是否具有ROLE_USER权限。到目前为止一切顺利,我在Spring安全上下文文件中完成了这个配置:

<security:http create-session="stateless" entry-point-ref="restAuthenticationEntryPoint"
 authentication-manager-ref="authenticationManager">

    <security:custom-filter ref="customRestFilter" position="BASIC_AUTH_FILTER" />
     <security:intercept-url pattern="/**" access="ROLE_USER" />       
</security:http>

如果用户具有正确的ROLES,此配置将检查所调用的每个URL,并且它正常工作,将抛出401 Unauthorized页面。

我遇到的问题是,当我将登录页面供所有人访问时,我会这样做:

<security:http create-session="stateless" entry-point-ref="restAuthenticationEntryPoint"
 authentication-manager-ref="authenticationManager">

    <security:custom-filter ref="customRestFilter" position="BASIC_AUTH_FILTER" />
      <security:intercept-url pattern="/login**" access="ROLE_ANONYMOUS" /> 
     <security:intercept-url pattern="/**" access="ROLE_USER" />       
</security:http>

但我不知道为什么Spring安全性没有抓住这个URL。也许Angular以不同方式管理URL。

最后,我尝试删除<security:intercept-url pattern="/**" access="ROLE_USER" />并仅授予/登录**访问ROLE_USER,但未找到此页面。有人知道这里会发生什么吗?

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

我写了一个小sample application,通过将会话ID公开为HTTP头(x-auth-token)来说明如何将AngularJS与Spring Security集成。该示例还提供了一些(简单)授权(从服务器返回角色),以便客户端AngularJS应用程序可以对此做出反应。这当然主要是为了用户体验(UX)目的。始终确保您的REST端点具有财产安全性。

我的博客帖子是 here