Playframework 1.2.7拦截器

时间:2014-04-29 07:17:17

标签: playframework-1.x

PlayF 1.2.7拦截器存在问题。 我有一个带@Before注释的控制器AuthCtl。 另一个控制器类AlarmCtl使用@With(AuthCtl.class)。

public class AuthCtl extends Controller {

    public static final String KMK_AUTH_TOKEN = "KMK_AUTH_TOKEN";
    public static final String KMK_USER_ID = "KMK_USER_ID";


    @Before
    static void checkAuthorization() throws KomekException {
        if (request.cookies.containsKey(AuthCtl.KMK_AUTH_TOKEN) && 
                request.cookies.containsKey(AuthCtl.KMK_USER_ID)) {
            //Something
        } else {
            throw new UnauthorizedException();
        }
    }

    @Catch
    static void handleExceptions(Throwable t) {
        response.status = ((KomekException)t).getErrorCode();
        response.accessControl("*");
        response.contentType = "application/json";
        renderText(t.toString());
    }
}


@With(AuthCtl.class)
public class AlarmCtl  extends Controller {
    //Something
}

因此,当我在checkAuthorization方法中抛出异常时,我的handleExceptions方法不会拦截它。问题是什么?

1 个答案:

答案 0 :(得分:0)

您需要指定要捕获的异常类型。

所以在你的情况下,需要这样写:

@Catch(KomekException.class)
static void handleExceptions(Throwable t) {
    response.status = ((KomekException)t).getErrorCode();
    response.accessControl("*");
    response.contentType = "application/json";
    renderText(t.toString());
}

或者,对于一般(一种脏)catch all,使用根Exception类:

@Catch(Exception.class)
static void handleExceptions(Throwable t) {
    response.status = ((KomekException)t).getErrorCode();
    response.accessControl("*");
    response.contentType = "application/json";
    renderText(t.toString());
}