簡體   English   中英

Grails Spring Security拒絕訪問其他插件

[英]Grails spring security denying access to other plugin

在grails 2.4.3項目上,我正在使用Spring Security Core插件(2.0RC4)和另一個名為Feature Flipping的插件。

我所有的控制器均已正確保護,並且身份驗證正常進行,沒有任何問題。

“功能翻轉”插件提供了一個/admin/feature URI,該URI允許用戶通過Web進行切換。

我嘗試將靜態規則配置為僅允許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: 'org.springframework.security.core.context.SecurityContextImpl@2116e65: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@2116e65: Principal: [REDACTED].security.UserDetails@f9520f8b: Username: pygillier; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@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_]

我將根據我已經從您那里獲得的信息對此進行嘗試。 如果您未指定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']
]

供參考,這是代碼行,它向我暗示了這里發生的事情。 這告訴我Spring Security插件找不到您已定義的'ROLE_ADMIN'屬性,並且rejectIfNoRule設置為true(這是默認值)。

好的,我知道了,

我感到困惑,因為插件的控制器名稱和URL不同。

在我需要設置的staticRules中,插件的控制器名稱為FeatureSwitchAdmin並映射為/admin/features

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

獲得有效的憑證。

(使用@rmlan線索和官方文檔找到解決方案)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM