1

내 Grails 앱에 AuthorizationFilter을 생성하여 요청 매개 변수를 검사하고 사용자가 요청을 진행할 수있는 권한이 있는지 여부를 결정합니다. 난 내 AuthorizationFilter 내에서 사용자 정의 예외를 발생 이후 Grails를 선언 execption이 같은 경로를 통해 처리와 함께 처리 할 수있는 기대했다 :Grails는 필터로 선언적 예외 처리를 허용합니까?

"403"(controller: 'error', action: 'status403', exception:AuthException) 

...하지만 난 (Grails를 2.2.4에서이 때 밝혀 및 최신 dev 스냅 샷) 얻을 수

java.lang.IllegalArgumentException: Method name must not be null 
    at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.retrieveAction(ProxyAwareMixedGrailsControllerHelper.java:41) 

그래서 ... 선언적 예외 처리 필터를 함께 사용하는 좋은 방법이 있습니까?

+0

빠른 팁 : UrlMappings을 수정하는 경우 grails clean을 선택한 다음 run-app를 사용하는 것이 좋습니다. 지금 구현을 다시 테스트했으며 예상대로 작동합니다. 필요한 경우 프로젝트/코드를 공유 할 수 있습니다. – dmahapatro

답변

3

Controllers에서 선언 예외를 처리 할 수 ​​있지만 Filters에서 처리 할 수 ​​있습니다. 당신은

당신이 필터에서 error 컨트롤러를 제외하고 있는지 확인 질문에 제공되는 UrlMapping에 따라 ErrorController의 status403 행동의 응답을 렌더링 오류 코드를 로직 위

class AuthorizationFilters { 
    def filters = { 
     auth(controller: 'error', invert: true) { 
      before = { 
       if(1){ //If auth fails 
        response.sendError(403) 
        //render(status: 403) //or 
        //redirect(controller: 'error', action: 'status403') //or 
       } 
       return false 
      } 
     } 
    } 
} 

를 보내는 대신 응답을 사용할 수 있습니다 .