2011-08-30 11 views
0

認証されていないユーザーがリソースを要求すると、ログインページにリダイレクトされますが、j_security_checkは元の要求されたリソースを保持します。ユーザーが正常にログインすると、そのリソースにリダイレクトされます。j_security_checkで使用された元の要求ページを変更するには?

問題は、要求されたリソースが動的なため、存在しないことがあることです。私はこの振る舞いで私のアプリケーションに多くの場所を持っているので、各 "リソースハンドラ"(コントローラ)でこれを検証するのではなく、をログインページに転送するフィルタにすべてのロジックを集中させようとしています。

ここで、フォームベース認証メカニズムによって保持されている元の要求リソースを取得するにはどうすればよいですか。ベンダーに依存していますか?

別の方法:

私はURLを変更することはできませんが、私は「有効なURL」で、ユーザーへのリダイレクトを送ることができますj_security_check前にフィルタを実行することができます。しかし、j_security_checkより前にフィルタを実行するにはどうすればよいですか?

答えて

0

ページが動的で「存在しないかもしれませんが、ある時点でリンクが有効であった可能性があり、アプリケーションがその古い要求を禁止すると、アプリケーションで何かが壊れます。 「動的ページ」が実際にパス変数を使用したパターンマッチングである場合、各ページ要求を適切に処理する必要があるため、コードはこれらの状況に対応する必要があります。

例:ユーザーのパブリックプロファイルを表示するページがあります。ユーザーが自分のサイトから登録を解除する可能性があります。今、「ページ」は「存在してはいけません」。春には、例えば、私はPathVariableを使用し、ユーザの有無に私のハンドラが応答するだろう:

@RequestMapping(value="/display/{userkey}") 
public String displayUser (@PathVariable("userkey") String userkey) { 
    User user = someDAO.getUser(userkey); 
    if(user != null) { 
     // do something 
    } else { 
     // do something else 
    } 
    return "theView"; 
} 

この場合、私はブラウザに何らかの意味のあるメッセージを返す、または多分でしょう別の場所にリダイレクトします。これはあまりセキュリティ上の問題ではなく、アプリケーション設計のより多くのものと思われます。

+0

リソース:画像、pdfsなどのファイル(CMS)です。私が言ったように、各 "リソースタイプ"ごとに1つのコントローラがあります。しかし、私たちは非常に多くのことがあり、このロジックを1つのフィルタに集約しようとしています。私はこのために「フロント・コントローラー」に「作業員にサービス」を追加できることを知っていますが、フィルターを使用してモジュールを変更せずにこのフィーチャーを追加できます(「インターセプト・フィルター」)。たぶん私たちはデザインで何かを見逃してしまったので、これについて議論する別のスレッドを開始しますが、建築的な解決策でさえ、私はj_security_checkを使って作業する方法を知っていました.-D – ggarciao

関連する問題