2014-10-28 134 views
0

关于grails 2.4.3项目我正在使用Spring Security Core插件(2.0RC4)和另一个插件调用Feature Flipping。Grails弹簧安全拒绝访问其他插件

我的所有控制器都正确安全,认证正常,没有任何问题。

“功能翻转”插件暴露了一个允许用户通过网页切换的/admin/feature URI。

我试图配置静态规则,只允许ROLE_ADMIN用户访问此资源,但我仍然收到“访问被拒绝”错误。

任何想法?

我STATICRULES:

'/admin/**':     ['ROLE_ADMIN'] 

SpringSecurity调试日志:

2014-10-28 17:15:47,805 [http-bio-8080-exec-4] DEBUG matcher.AntPathRequestMatcher - Request '/admin/features' matched by universal pattern '/**' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 1 of 8 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG context.HttpSessionSecurityContextRepository - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: '[email protected]16e65: Authentication: org.springframew[email protected]2116e65: Principal: [REDACTED][email protected]: Username: pygillier; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]255f8: RemoteIpAddress: 127.0.0.1; SessionId: 7FF242941B7F95FD17E97D8611B3A5CF; Granted Authorities: ROLE_ADMIN, ROLE_USER' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 2 of 8 in additional filter chain; firing Filter: 'MutableLogoutFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 3 of 8 in additional filter chain; firing Filter: 'RequestHolderAuthenticationFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 4 of 8 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 5 of 8 in additional filter chain; firing Filter: 'GrailsRememberMeAuthenticationFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 6 of 8 in additional filter chain; firing Filter: 'GrailsAnonymousAuthenticationFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 7 of 8 in additional filter chain; firing Filter: 'ExceptionTranslationFilter' 
2014-10-28 17:15:47,806 [http-bio-8080-exec-4] DEBUG web.FilterChainProxy - /admin/features at position 8 of 8 in additional filter chain; firing Filter: 'FilterSecurityInterceptor' 
2014-10-28 17:15:47,807 [http-bio-8080-exec-4] DEBUG intercept.FilterSecurityInterceptor - Secure object: FilterInvocation: URL: /admin/features; Attributes: [_DENY_] 
+1

你尝试过打开春季安全调试?我无法强调这对寻找配置错误和简单问题有多大帮助。 – rmlan 2014-10-28 14:57:52

+0

启用调试,仍然没有发生什么线索(查看问题的日志) – 2014-10-28 16:17:36

+0

那么我们可以从日志中看到,您发布的唯一属性是返回此URL的_DENY_'。 'securityConfigType'的配置设置是什么?如果你没有,插件将默认为注释,而不是静态规则映射。您需要指定您想使用地图。 – rmlan 2014-10-28 16:52:48

回答

0

OK了吧,

我弄糊涂了的插件的控制器名称& URL是不同的。

插件的控制器名称为FeatureSwitchAdmin和被映射为/admin/features,在我STATICRULES我需要设置

'/featureswitchadmin/**':    ['ROLE_ADMIN'] 

得到有效的凭证。

(发现@rmlan线索和official doc溶液)

1

我要给此基础上,我已经从你已经得到的信息了一枪。如果您没有指定securityConfigType,则Grails Spring Security插件将默认使用控制器类上的注释。如果是这样的话(或者你明确使用注解,因为你愿意的话),你有两个选择:

  1. 设置grails.plugin.springsecurity.rejectIfNoRule为false。不推荐这样做,因为它可能会使其他URL未明确保密。尽管如此,它也许可以用于开发。
  2. 如果我的假设是正确的,那么您可能使用了不正确的静态规则配置。如果您使用的注解,你的静态规则的地图必须被定义为配置项grails.plugin.springsecurity.controllerAnnotations.staticRules

因此,您的配置可能应该是这样的:

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

以供参考,这是line of code是给了我一个关于这里发生了什么的暗示。这告诉我,Spring Security插件无法找到您定义的'ROLE_ADMIN'属性,并且设置为true(这是默认设置)。