2

Grails の *.gsp ページへの直接アクセスを防ぐための実行可能な解決策をアドバイスしてくれる人はいますか?

インターセプト '/**.gsp' を確認したところ、直接アクセスを除外するだけでなく、コントローラーなどからレンダリングされたページも除外するため、これを使用することは不可能であることがわかりました。

*.gsp の直接アクセスを防ぐことはできますが、UrlMapping.groovy で次のように設定しようとしましたが、ページのナビゲーションも混乱します。その場合、すべてのリンクがホームページに移動するようです。

    "/**.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

4 に答える 4

1

残念ながら、UrlMappings では解決策が見つかりませんでした。これは少し醜い解決策ですが、すべてのページで同じレイアウト (たとえば main.gsp) を使用する場合、この行をレイアウト (main.gsp) に追加できます。

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

このようにして、ユーザーが gsp ページに直接アクセスしようとすると、ホームページにリダイレクトされます。

最善の解決策ではないかもしれませんが、これまでのところうまくいきました。

ずる賢い

于 2011-03-07T16:35:34.167 に答える
1

これらを UrlMappings に追加します。

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

そして、ForbiddenController と index.gsp を「GSP に直接アクセスすることは考えないでください」で作成します。その内容として。

乾杯。

于 2011-05-31T06:44:18.333 に答える
0

リクエストごとに実行されるフィルタを作成するのはどうですか?

于 2011-03-09T09:17:42.040 に答える