5

Grails 3.0.11 インターセプタードキュメントに従って、私は以下のように独自のインターセプターをコーディングします。

class AuthInterceptor {
    int order = HIGHEST_PRECEDENCE;
    AuthInterceptor() {
        println("AuthInterceptor.AuthInterceptor(): Enter..............");
        // ApiController.index() and HomeController.index() don't need authentication.
        // Other controllers need to check authentication

        matchAll().excludes {
            match(controller:'api', action:'index);
            match(controller:'home', action:'index');
        }
    }
    boolean before() {
        println "AuthInterceptor.before():Enter----------------->>>>>>";
        log.debug("AuthInterceptor.before(): params:${params}");
        log.debug("AuthInterceptor.before(): session.id:${session.id}");
        log.debug("AuthInterceptor.before(): session.user:${session.user?.englishDisplayName}");
        if (!session.user) {
            log.debug("AuthInterceptor.before(): display warning msg");
            render "Hi, I am gonna check authentication"
            return false;
        } else {
            return true;
        }
    }

    boolean after() {
        log.debug("AuthInterceptor.after(): Enter ...........");
        true
    }

    void afterView() {
        // no-op
    }
}

class P2mController {
    def index() {
        log.debug("p2m():Enter p2m()..............")
        render "Hi, I am P2M";
    }
}

ログ コンソールからhttp://localhost:8080/p2m/indexをテストすると、認証がチェックされずに P2mController.index() が実行されることがわかりました。

ただし、http://localhost:8080/api/indexまたはhttp://localhost:8080/home/indexをテストすると、 AuthInterceptor.check() が実行され、ブラウザが表示されます

Hi, I am gonna check authentication

P2mController が認証されていることを望み、 HomeController.index() と ApiController.index() は認証をチェックする必要はありません。しかし、ログと応答から、結果は反対です。

私の AuthInterceptor のどこが間違っていますか?

4

1 に答える 1

3

代わりにこれを行いたい:

matchAll().excludes(controller:'api', action:'index')
          .excludes(controller:'home', action:'index')

そして、最初の「インデックス」の後の単一引用符を忘れないでください。

于 2016-01-21T00:21:39.240 に答える