Rest Grails-仅使用基本身份验证的spring安全性

Rest Grails-仅使用基本身份验证的spring安全性,rest,grails,spring-security,Rest,Grails,Spring Security,我正在尝试创建一个简单的应用程序,实际上是一个概念验证,在这个应用程序中,我的最终用户将仅通过RESTful服务与服务器交互。我的用户界面将使用angularjs向这些服务发送ajax请求,然后在浏览器中呈现响应 为了创建一个安全层,我正在尝试配置SpringSecurity插件,但是我的配置有一个问题。此时此刻,这是我的配置: grails.plugin.springsecurity.userLookup.userDomainClassName = 'mymoney.Subject' grai

我正在尝试创建一个简单的应用程序,实际上是一个概念验证,在这个应用程序中,我的最终用户将仅通过RESTful服务与服务器交互。我的用户界面将使用angularjs向这些服务发送ajax请求,然后在浏览器中呈现响应

为了创建一个安全层,我正在尝试配置SpringSecurity插件,但是我的配置有一个问题。此时此刻,这是我的配置:

grails.plugin.springsecurity.userLookup.userDomainClassName = 'mymoney.Subject'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'mymoney.SubjectRole'
grails.plugin.springsecurity.authority.className = 'mymoney.Role'

grails.plugin.springsecurity.useBasicAuth = true
grails.plugin.springsecurity.basic.realmName = "Restricted Access"

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/**': ['permitAll']
]

grails.plugins.springsecurity.filterChain.chainMap = [
    '/rest/**': 'JOINED_FILTERS,-exceptionTranslationFilter',
    '/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter'
]
如果我保持这样的配置,所有人都可以使用,即使是/rest/**资源。我猜链图之前的静态规则会搞乱一切。但问题是,如果我删除它,那么一切都属于我的基本权限

所以我真正想要的是,/rest/**下的每个资源都将由基本身份验证来保护,并且我的SPA(单页应用程序)在根上下文(“/”)中可以访问,无需任何身份验证即可供每个人使用


我在这里遗漏了什么?

如果您有/**=permitAll,则URL在过滤器链中如何分区并不重要-您没有阻止任何内容。您还需要拆分访问规则,例如

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
   '/rest/**': ['ROLE_ADMIN'],
   '/**': ['permitAll']
]

如果您有/**=permitAll,则URL在过滤器链中如何划分并不重要-您没有阻止任何内容。您还需要拆分访问规则,例如

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
   '/rest/**': ['ROLE_ADMIN'],
   '/**': ['permitAll']
]

只要详细说明一下伯特的正确答案,你就可以在网上找到你需要知道的一切

不过,为了让您开始使用,“permitAll”表达式本质上是让相应的URL可以公开访问。在这种情况下,“/**”URL是对应的URL,它对应于域下的每个可能的URL。因此,staticRules配置使整个应用程序可以公开访问

解决方案是只在可公开访问的资源上指定“permitAll”表达式(“//images/”、“/login/”等),然后在受保护的URL上指定另一个表达式(“/admin/*”等)

“permitAll”表达式是Spring表达式语言(SpEL)的成员。在我链接的文档底部有一个包含许多SpEL表达式的表。使用SpEL,您可以为应用程序配置各种访问规则。例如:

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
   '/**/images/**': ['permitAll'],        // publicly accessible images directory
   '/register': ['isAnonymous()'],        // has to be anonymous to register
   '/profile/**': ['isAuthenticated()'],  // has to be authenticated
   '/lounge/**': ['ROLE_USER', 'ROLE_ADMIN'],  // has user or admin role
   '/admin/**': ['ROLE_ADMIN']            // has to be an administrator
]

更多的选择是可能的,文档是一个很好的信息资源。

为了详细说明Burt的正确答案,你可以在文档中找到你需要知道的一切

不过,为了让您开始使用,“permitAll”表达式本质上是让相应的URL可以公开访问。在这种情况下,“/**”URL是对应的URL,它对应于域下的每个可能的URL。因此,staticRules配置使整个应用程序可以公开访问

解决方案是只在可公开访问的资源上指定“permitAll”表达式(“//images/”、“/login/”等),然后在受保护的URL上指定另一个表达式(“/admin/*”等)

“permitAll”表达式是Spring表达式语言(SpEL)的成员。在我链接的文档底部有一个包含许多SpEL表达式的表。使用SpEL,您可以为应用程序配置各种访问规则。例如:

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
   '/**/images/**': ['permitAll'],        // publicly accessible images directory
   '/register': ['isAnonymous()'],        // has to be anonymous to register
   '/profile/**': ['isAuthenticated()'],  // has to be authenticated
   '/lounge/**': ['ROLE_USER', 'ROLE_ADMIN'],  // has user or admin role
   '/admin/**': ['ROLE_ADMIN']            // has to be an administrator
]
更多的选择是可能的,文档是一个伟大的信息资源