문제

I'd like to create an AuthorizationFilter in my Grails app that will inspect request parameters and determine whether a user is authorized to proceed with a request. I was hoping I could throw a custom exception from within my AuthorizationFilter and later handle it with Grails declarative execption handling via a route like:

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

... but turns out when I try this in grails 2.2.4 (and the latest dev snapshot) I get

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

So... is there any good way to use declarative exception handling together with filters?

도움이 되었습니까?

해결책

I guess you can handle declarative exception from Controllers but Filters. You can use response instead to send the error code

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
            }
        }
    }
}

Above logic will render the response from ErrorController's status403 action based on the UrlMapping that is provided in the question

Make sure you are excluding error controller from filters.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top