Grails 3.0.x Interceptor matchAll(). Исключает для нескольких контроллеров
Следуя документу Grails 3.0.11 Interceptors, я кодирую свои собственные Interceptors, как показано ниже:
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?
1 ответ
Вы хотите сделать это вместо этого:
matchAll().excludes(controller:'api', action:'index')
.excludes(controller:'home', action:'index')
И не забывайте одиночную кавычку после первого "индекса".