Это довольно распространенная практика для добавления этого динамического метода в ваше закрытие BootStrap.init:
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
это позволяет вам проверить, является ли текущий запрос вызовом ajax, выполнив:
if(request.xhr) { ... }
Самое простое решение - добавить что-то вроде этого в действие todo:
if(!request.xhr) {
redirect(controller: 'auth', action: 'index')
return false
}
Вы также можете использовать фильтры / перехватчики. Я построил решение, в котором я аннотировал все действия, предназначенные только для ajax, с помощью пользовательской аннотации, а затем проверял это в фильтре.
Полный пример grails-app / conf / BootStrap.groovy:
import javax.servlet.http.HttpServletRequest
class BootStrap {
def init = { servletContext ->
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
}
def destroy = {
}
}