在grails控制器中识别ajax请求或浏览器请求

2024-05-16

我正在开发一个使用大量ajax的grails应用程序。如果请求是ajax调用,那么它应该给出响应(这部分正在工作),但是如果我在浏览器中输入URL,它应该带我到主页/索引页面而不是请求的页面。下面是ajax调用的示例gsp代码。

<g:remoteFunction action="list" controller="todo" update="todo-ajax">

<div id ="todo-ajax">
//ajax call rendered in this area
</div>

如果我们输入http://localhost:8080/Dash/todo/list http://localhost:8080/Dash/todo/list在浏览器 URL 栏中,控制器应重定向到http://localhost:8080/Dash/auth/index http://localhost:8080/Dash/auth/index

如何在控制器中验证这一点。


在 BootStrap.init 闭包中添加此动态方法是一种很常见的做法:

    HttpServletRequest.metaClass.isXhr = {->
         'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
    }

这允许您通过执行以下操作来测试当前请求是否是 ajax 调用:

if(request.xhr) { ... }

最简单的解决方案是将这样的内容添加到您的待办事项操作中:

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 = {
     }
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在grails控制器中识别ajax请求或浏览器请求 的相关文章

随机推荐