Как запретить прямой доступ к * .gsp страницам в Grails - PullRequest
2 голосов
/ 07 марта 2011

Может ли кто-нибудь посоветовать выполнимое решение для предотвращения прямого доступа к * .gsp страницам на Grails?

После проверки перехвата '/**.gsp' я обнаружил, что его невозможно использовать, поскольку он не толькоотфильтровывает прямой доступ, а также рендеринг страниц с контроллеров и т. д.

Я попытался настроить следующее в UrlMapping.groovy, хотя я могу запретить прямой доступ * .gsp, но я также напуталдля навигации по страницам;тогда все ссылки идут на домашнюю страницу.

    "/**.gsp" {
isEligible = {
    System.err.println("ALL PARAMS: " + params)
   request.requestURL.toString().endsWith(".gsp")
}
controller = {
    if (request.requestURL.toString().endsWith(".gsp")) {
        "public"
    } else {
        "*"
    }
}
action = {
    if (request.requestURL.toString().endsWith(".gsp")) {
        "home"
    } else {
        "*"
    }
}
}

Однажды я подумал о настройке фильтра, например org.springframework.web.filter.OncePerRequestFilter, но не совсем уверен, как определить его, вероятно, так как Grails имеет тенденциюсоздайте раздел фильтров web.xml самостоятельно.

Есть мысли?

Большое спасибо!Том

Ответы [ 4 ]

1 голос
/ 31 мая 2011

Добавьте их в UrlMappings:

"/**.gsp" {
    controller = {
        if(request.requestURL.toString().endsWith(".gsp")) {
            "forbidden"
        } else params.controller
    }
}

И создайте ForbiddenController и index.gsp с «Никогда не думайте о прямом доступе к GSP».как его содержание.

Приветствия.

1 голос
/ 07 марта 2011

к сожалению я не нашел решения с UrlMappings.Вот решение, которое немного уродливо, но если вы используете одинаковый макет (например, main.gsp) на всех страницах, вы можете добавить эти строки в макет (main.gsp).

    <%  if (request.requestURL.toString().endsWith(".gsp")) {
       response.sendRedirect("${request.contextPath}/")
    } %>

thisКстати, если пользователь пытается получить прямой доступ к странице gsp, он перенаправляется на домашнюю страницу.

может быть, не лучшее решение, но до сих пор работало для меня.

ура беглый

0 голосов
/ 09 марта 2011

Как насчет написания фильтра, который будет выполняться при каждом запросе?

0 голосов
/ 07 марта 2011

в соответствии с grails FAQ конфигурация "/**.gsp" в UrlMapping.groovy должна работать.

пока не могу попробовать.* Как вы добавили ссылки на страницу?Ссылки также нарушаются при использовании тега ссылки?

<g:link controller="book" action="list">Book List</g:link>
...