Grails、Spring Security 和 Angular JS - 如何保护 URL?

Posted

技术标签:

【中文标题】Grails、Spring Security 和 Angular JS - 如何保护 URL?【英文标题】:Grails, Spring Security and Angular JS - How to protect URLs? 【发布时间】:2013-11-29 08:21:06 【问题描述】:

您好,我使用 Grails 构建的后端和 AngularJS 构建的前端构建应用程序。我想使用 Grails Spring Security Plugin 为我的应用程序提供一些安全性,但我遇到了一些问题。首先,我不知道如何只允许具有指定角色的用户访问专用 URL。

例如我有 3 种类型的 URL

/userspace/**  - (eg. http://localhost:8080/MyApp/#/userspace/settings -displays view with user's profile settings)
/adminspace/** - (eg. http://localhost:8080/MyApp/#/adminspace/usersManagement - displays view with registered users) 
/rest/** - (eg. http://localhost:8080/MyApp/rest/book - returns JSON list of books, http://localhost:8080/MyApp/book/123 - returns book as JSON with id=123.

我想为ROLE_USER 提供/userspace/ 的访问权限,为ROLE_ADMIN 提供/adminspace/ 的访问权限。

我不知道我应该在Config.goovy 中设置哪些属性才能使其成为可能? url中有angular的#吗?

我也不知道应该如何保护/rest/**。这些 url 用于与后端通信,有时它们由 angular 的 $http 服务从 Angular 的所有人可见的视图控制器调用,但有时它们从受保护的视图中调用。也许方法是让 /rest/** url 可供所有人使用并使用指定的注释,例如。 @Secured(['ROLE_USER']) 在 grails 控制器中?

我会很感激你的帮助

【问题讨论】:

【参考方案1】:

这里讨论(当然不是特定于 Angular):http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/requestMappings.html

如果您有带注释的控制器,请将这些额外的 URL 映射到 controllerAnnotations.staticRules 映射中。否则使用数据库中的 Requestmaps,或 interceptUrlMap 属性中的一张大地图。

【讨论】:

谢谢它的工作。我不知道这是否是一个错误,但 Spring Security 文档说我应该使用:grails.plugin.springsecurity.controllerAnnotations.staticRules。在我将其更改为 grails.plugins.springsecurity.controllerAnnotations.staticRules 之前,它不起作用。也许对某人有帮助。 我不确定您使用的是哪个版本的插件。我的链接是针对 2.0 插件的,但 1.2 文档位于 grails-plugins.github.io/grails-spring-security-core/docs/…

以上是关于Grails、Spring Security 和 Angular JS - 如何保护 URL?的主要内容,如果未能解决你的问题,请参考以下文章

Grails + spring-security-core:用户登录后如何分配角色?

Grails 3 和 Spring Security:当用户未登录时返回 401

Grails - Spring Security / Social - Facebook 插件 setAccessToken 和 getAccessToken

ClassNotFoundException: SimpleGrantedAuthority - Grails 2.4.2 和 Spring Security

Spring Security UI 和 grails 2.0

Grails 3 Spring Security 覆盖登录表单