2009-05-18 8 views
2

アクションを呼び出すために現在のgspページに依存するコントロールロジックを構築しようとしています。現在のgspページを識別するために使用できるタグまたはセッションメソッドがありますGrailsのセキュリティ問題と検索エンジンの最適化

singupとlogin以外のすべてのGSPへのアクセスを制限したいので、ユーザーが他のgspを開くと、彼はサインアップページにリダイレクトされ、ログインページに移動することもできます。

私が実装しようとしていますロジックがCURRENT_PAGEがlogin.gspかsingup.gspであるならば、他に何もユーザーが問題なくログインページにナビゲートすることができる場所//登録にリダイレクトしないでください。このようなものですあまりにも

と私このロジックをメインレイアウトに追加して、すべてのアプリケーションドメインに実装されるようにします。

RequestmapControllerまたはUrlMappingsを使用してこれを行う別の方法があるのでしょうか?

springMVCでの経験があれば誰でも、標準のサーブレットフレームワークの上に構築されたSpringMVC上にGrailsが構築されているので、助けてくれるでしょう。

注:実装されているセキュリティ・メカニズムのこのタイプでどのようにアプリケーションがSEOフレンドリー(すなわち、Googleのインデックス。)することができます:私はAcegiのプラグイン

備考を使用していますか?

+1

'現在のgspページ'とは、レンダリングされているgspページのファイル名を意味しますか? – Chii

+0

はいChii thats私が意味したthats、そのような私はsingupとログインを除くすべてのgspsへのアクセスを制限したいので、ユーザが他のgspを開くと、彼はサインアップページにリダイレクトされ、彼はまたログインページにナビゲートすることができます 私が実装しようとしていますロジックはcurrentPageには、ログインまたはsingupであるならば、 は、ユーザーがあまりにも問題なくログインページにナビゲートすることができる場所//登録には何もない リダイレクトを行うこの ようなものです:) と私はしたいですこのロジックをメインレイアウトに追加すると、すべてのアプリケーション間で実装されるようになります。 – zotherstupidguy

+0

RequestmapControllerまたはUrlMappingsを使ってこれを行う別の方法があるのだろうか? – zotherstupidguy

答えて

3

編集:申し訳ありませんが、私はあなたの質問を誤解しました。私はあなたがRequestmapsの代替案を探していると思っていました。私はもともとあなたがRequestmapsを使用する場合は、次の操作を行うことができsecuring the controllers with annotations.

を提案した理由は次のとおりです。

  1. 次のようになり、新たなRequestmap作成します。
    URLパターン= /login/**
    役割= IS_AUTHENTICATED_ANONYMOUSLY

  2. 他のサイトへのアクセスを制限するには、すべてのURLに一致する別のrequestmapエントリを作成します。
    URLパターン= /*/**
    役割= ROLE_USER(あなたが好きな他の役割を使用することができます)

IS_AUTHENTICATED_ANONYMOUSLYは、誰もが一致したURLにアクセスできることを意味します。最初のルールはより具体的なので、2番目のより一般的なルールを上書きする必要があります。

詳細については、AcegiSecurity Plugin - Securing URLsをご覧ください。

サイトのSEOについて。 AFAIK検索エンジンは、認証が必要なサイトにアクセスすることはできません。そのため、専門家エクスチェンジのようなサイトでは、Googleによってインデックスを取得するためにsly tricksを使用しています。

匿名ユーザーに書き込みのためのログインを要求しながら(SOのように)、読み取りアクセスを許可することもできます。これにより、あなたのサイトは検索エンジンのボットによって索引付けされます。

こちらがお役に立てば幸いです。

1

あなたはSpringセキュリティプラグインが必要です。これを行う最善の方法はGSP内ではなく、すべてのWebリクエストに対してフィルタを使用することです。それはあなたにRequestmapsとUrlMappings GrailsNewbieが言及します。

+0

こんにちは、私はacegiプラグインを使用しています。どうすればそのフィルタを実装できますか?ユーザがサインインしていない場合、彼はsignup.gspとlogin.gspのブラウザにしかアクセスできません。 – zotherstupidguy

3

あなたはこれを読む必要があります。link text

し、チュートリアルをAcegiのプラグインを使用して:link text

後者は、私は行くだろう方法です。ロールを設定し、ロールによって "ページ"とURLを保護することができます。また、ユーザーを作成して役割に割り当てる方法も含まれています。

はやる、AcegiのプラグインをGrailsのインストールするには: grails install-plugin acegi

+0

私はすでにacegiを使用しています!私はちょうどその仕事をすることができるフィルターを作る方法を知らない! – zotherstupidguy

+0

私がやることは、あなたが必要とするアクセスレベルの役割を果たすことです。そして、登録とログインコントローラ(ACEGIは両方の機能をオプションのコントローラ/ビューとして提供します)を除いて、すべてのURLのRequestmapエントリを作成します。ですから、Requestmapを適用してTosecureControllerというコントローラを言うならば、Grailsアプリケーションに/ tosecureのURLが必要です。リクエストマップで/ tosecure/**を作成し、ログインACEGIコントローラ/ビューで保護されます(私は換気しています) – tegbains

+0

簡単な方法 - すべてのものにマッチする一般的なリクエストマップを作成し、 'user'ロールが必要です。次に、匿名のユーザーがアクセスしたいものを上書きします。 –