2012-05-04 1 views
1

Grails 2.0.3과 최신 스프링 보안 플러그인을 사용하여 컨트롤러를 보호하고 있습니다.Grails Spring Security에서 @Secured가 왜 무시 될 수 있습니까?

하지만 어떻게 든 컨트롤러는 보안되지 않습니다.

import grails.plugins.springsecurity.Secured 

@Secured("ROLE_USER") 
class SettingsController extends UtilController { 
    def index(){ 
    render "should not run while not logged in" 
    } 
} 

내가 로그인되어 있지 않을 때 메시지가 표시됩니다. springSecurityService를 삽입하면 올바른 로그인 상태 (true/false)가 표시되므로 주석이 처리되지 않습니다.

"IS_AUTHENTICATED_FULLY"요구 사항을 추가하고 주석을 메소드로 이동하려고 시도했지만 도움이되지 않습니다.

무엇이 관련 될 수 있습니까?

답변

5

@Secured 주석 목록 허용 역할 목록 (String[])을 사용하면 문자열을 문자열 배열로 변환하는 데 문제가있는 것으로 보입니다.

@Secured(["ROLE_USER"])으로 시도해 볼 수 있습니까?

+0

내가 해봤'@Secured ([ "ROLE_USER을", "IS_AUTHENTICATED_FULLY"])', 단순히'@Secured ([ "ROLE_UNEXISTENT"]) ',하지만 도움이되지 않습니다. 아마도 그런 경우는 아닙니다. –

+0

'resuestmap'보안을 사용하도록 구성하지 않았습니까? –

-2

나는 @secured 주석은 클래스가 아닌 컨트롤러 내부의 메소드에서만 작동한다고 생각합니다.

은 다음과 같이 사용하는 것을 시도하십시오 :

import grails.plugins.springsecurity.Secured 

class SettingsController extends UtilController { 
    @Secured(["ROLE_USER"]) 
    def index(){ 
    render "should not run while not logged in" 
    } 
} 
+0

ROLE_ADMIN> ROLE_USER와 같은 계층 구조를 사용하는 경우 특히 유용합니다. 컨트롤러 레벨은 ANY 액션에 액세스 할 수있는 가장 낮은 레벨을 설정 한 다음, 더 높은 레벨을 필요로하는 특정 액션을 설정할 수 있습니다. 또는 ROLE_USER를 사용하면 인덱스에 액세스 할 수있는 것처럼 ROLE_USER 및 ROLE_ADMIN이있는 경우 adminIndex를 볼 수 있습니다 ... – Kelly

5

당신이 config 파일에서

grails.plugins.springsecurity.securityConfigType = "Annotation" 

이 아닌 다른 뭔가를해야합니까?

+0

방금 ​​내 하루를 저장했습니다. :) – user666

0

내 경우에 대한 해결책을 찾았습니다. grails.plugins.springsecurity 목록에 filterInvocationInterceptor이 있는지 확인하십시오. 예와 같은 필터 명이 Config.groovy 파일에서을 :

grails.plugins.springsecurity.filterChain.filterNames = [ 
    'securityContextPersistenceFilter', 'logoutFilter', 
    'authenticationProcessingFilter', 'myCustomProcessingFilter', 
    'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter', 
    'exceptionTranslationFilter', 'filterInvocationInterceptor' 
] 
관련 문제