0

私はGrailsを初めて使用し、1つはログイン用、もう1つはエクスプローラー用のコントローラーが2つしかないプロジェクトに取り組んでいます(左側のパネルにツリーのような構造が表示され、右側にフォルダーの内容が表示されるWindowsエクスプローラーに似ていますテーブル)

ユーザーがアプリケーションにアクセスすると、ユーザーがログインしていない場合はログイン画面が表示され、ログインしている場合はエクスプローラー画面が表示されます。

しかし、これはセッション タイムアウトの場合には当てはまりません。セッションがタイムアウトし、ユーザーがエクスプローラー画面の右側のパネルにあるリンクをクリックすると、右側のパネルにログイン画面が表示されるとします。

SecurityFilter を使用してログイン画面にリダイレクトしています。

SecurityFilters.groovy

デフフィルター = {

    loginCheck(controller:'*', action:'*') {
        before = {
    if (!session.idpuser && actionName != "login") {
                redirect(controller: "user", action: "login")                   
                return false 
            }
        }
    }
}

userController.groovy

デフログイン () {

if (request.get) {        
  return false
}
......  
 redirect(controller: "explorer", action: "file")

}

explorerController.groovy

def generateFiles = {

.....
render(template: 'list', model: [ dirList: dirList])

}

UrlMappings.groovy

静的マッピング = {

    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(action:"file", controller: "explorer")  
    "500"(view:'/error')
}

login.gsp が右側のパネルにレンダリングされていると思う理由は、ユーザーが右側のパネルのリンクをクリックすると「generateFiles」アクションが呼び出され、login.gsp が explorer.gsp 内のテンプレートとしてレンダリングされるためです。しかし、私はそれを修正する方法がわかりません:(

誰かがこの問題で私を助けてくれれば幸いです。助けてください!!!!!

4

2 に答える 2

0

これはajaxベースのサイトであるため、ajax応答ハンドラーで「ログインする必要があります」という応答を明示的に処理し、必要に応じてユーザーにログインページを強制する必要があります。

于 2012-08-22T14:51:33.677 に答える
0

解決策が効率的な方法ではない可能性があることがわかったようですが、機能します.Ajax呼び出しから得た応答に基づいて、Login.gspを使用してリダイレクトしています

window.location.href = '${createLink(controller='user', action='login')}'

ヒントをくれたcdeszaqに感謝します。ほんとうにありがとう。

于 2012-08-22T17:11:26.510 に答える