grails 컨트롤러에서 ajax 요청 또는 브라우저 요청 식별
저는 아약스를 많이 사용하는 성배 어플리케이션을 개발하고 있습니다.요청이 ajax call이면 응답(이 부분이 작동 중)을 제공해야 하지만 브라우저에 URL을 입력하면 요청된 페이지가 아닌 홈/인덱스 페이지로 이동해야 합니다.아래는 ajax call의 gsp code 샘플입니다.
<g:remoteFunction action="list" controller="todo" update="todo-ajax">
<div id ="todo-ajax">
//ajax call rendered in this area
</div>
브라우저 URL 표시줄에 http://localhost:8080/Dash/todo/list를 입력하면 컨트롤러가 http://localhost:8080/Dash/auth/index로 리디렉션됩니다.
컨트롤러에서 이를 검증하는 방법.
이 동적 메서드를 BootStrap.init closure에 추가하는 것이 일반적인 방법입니다.
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
이를 통해 다음을 수행하여 현재 요청이 ajax 호출인지 테스트할 수 있습니다.
if(request.xhr) { ... }
가장 간단한 해결책은 다음과 같은 작업관리 작업을 추가하는 것입니다.
if(!request.xhr) {
redirect(controller: 'auth', action: 'index')
return false
}
필터/차단기를 사용할 수도 있습니다.사용자 지정 주석을 사용하여 아약스 전용인 모든 작업에 주석을 단 다음 필터에서 이를 검증하는 솔루션을 구축했습니다.
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 = {
}
}
성배 이후 1.1안xhr
재산은 에 추가되었습니다.request
AJAX 요청을 탐지할 수 있는 개체입니다.그 용도의 예는 다음과 같습니다.
def MyController {
def myAction() {
if (request.xhr) {
// send response to AJAX request
} else {
// send response to non-AJAX request
}
}
}
일반적인 방법은 ajax 루틴이 요청에 헤더 또는 쿼리 문자열을 추가하고 이를 탐지하도록 하는 것입니다.ajax용 라이브러리를 사용하는 경우 이미 제공하고 있을 것입니다.
X-Requested-With 헤더 세트를 'XMLHtpRequest'에 추가하는 프로토타입을 사용하는 것 같습니다. 이를 탐지하는 것이 최선의 방법일 것입니다.
언급URL : https://stackoverflow.com/questions/665067/identifying-ajax-request-or-browser-request-in-grails-controller
'programing' 카테고리의 다른 글
현재 사용자 주문 InWooCommerce에서 주문 ID 가져오기 (0) | 2023.11.06 |
---|---|
realloc은 실제로 배경에서 어떻게 작동합니까? (0) | 2023.11.06 |
제출 시 양식 리디렉션 또는 새로 고침을 방지하시겠습니까? (0) | 2023.11.06 |
클릭()에서 jQuery 클릭을 사용하여 앵커를 처리합니다. (0) | 2023.11.06 |
CSS의 모든 N번째 요소 선택 (0) | 2023.11.06 |