2010-02-03 5 views
1

나는 주로 서비스 프레임 워크로 기능하는 응용 프로그램을 빌드 할 때 grails를 사용합니다. 내 질문은 : 컨트롤러와 같은 방식으로 서비스를 보호 할 수 있습니까?Shiro를 사용하여 Grails에서 서비스 보안하기

URI 기반 예 : 시로 플러그인이 지원하지만 Acegi plugin는 "실험"패션 (그것이 의미하는 것은 무엇이나)에 불구 않는 경우

class SecurityFilters { 
    def filters = { 
    all(uri: "/**") { 
     before = { 
     // Ignore direct views (e.g. the default main index page). 
     if (!controllerName) return true 
     // Access control by convention. 
     accessControl() 
     } 
    } 
    } 
} 

답변

3

나는 아무 생각도 없어.

업데이트

제대로 질문을 읽으면서, 당신이 당신이 서비스를 확보하기 위해 필터를 사용할 수 있는지 여부를 묻는 것 같다. 이 경우 Shiro는 Shiro가 아닌 승인을 수행하는 필터이기 때문에 다소 관련이 없습니다.

서비스를 보호하기 위해 필터를 사용할 수 있는지 여부에 대한 질문에 대답하려면 필터 내에서만 컨트롤러에 액세스 할 수 있으므로 대답은 '아니오'입니다. 그러나 Groovy 메타 프로그래밍을 사용하여 서비스에서 AOP 스타일의 메소드 인터셉트를 수행 할 수 있습니다.

기본적인 방법은 : 각 서비스에 대해

  • 클로저되어야 메타 클래스
  • 이 속성 값을 invokeMethod 속성을 추가한다. 이 클로저는 서비스에서 호출 된 각 메소드를 인터셉트합니다 (즉 대신 호출됩니다).
  • 이 폐쇄
    • 는 인증이 성공하면
    • 원래 메소드를 호출 보안 검사를 수행하고 예외를 발생 (또는 오류를 표시) 권한이

을 제외하고 실패 할 경우합니다

가능하다면 반드시 증명을 사용하는 것이 좋습니다. n 보안 플러그인 (예 : Shiro, Acegi)에게 위와 같은 방법으로 자신의 역할을 맡기지 않고 권한 부여 검사를 수행 할 수 있습니다.

+0

감사합니다. 나는 acegi가 아닌 shiro를 사용하고 있습니다. 서비스를 보호하기 위해 필터링을 활용하고 싶습니다. 미안하지만 분명하지 않다. – Brandon

+0

환상적인 조언을 해주셔서 감사합니다. – Brandon