2012-03-27 8 views
2

私は、Spring 3のセキュリティでうまくいく適切なログインシステムを持っています。Springセキュリティでログインが必要なときにセッションにメッセージを追加するには?

ユーザーがログインする前に安全なページにアクセスしようとすると、ユーザーはログインページにバウンスされ、ログインに成功すると、以前にアクセスしようとしたページにリダイレクトされます。これはほぼ正確に私が望むものです。

セキュリティページへのアクセスを試行したため、ユーザーがリダイレクトされたことをユーザーに説明する特別なエラーメッセージがログインページに表示されます。以前に安全なページにアクセスしようとしなかった人のログインページにそのエラーメッセージを表示することなく、これを行うにはどうすればよいですか?

ありがとうございました!

P.S.私はhttp://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#getting-startedとこのサイトや他の多くの記事を読んだが解決策を見いだせなかった。

答えて

0

jspを使用していますか?次に、thisのようなものが役に立つかもしれません。
Spring Securityからエラーメッセージをカスタマイズしますか?見てくださいhere

+0

は、あなたの答えは、おそらく働いているだろうが、私は、以前のセッションにエラーメッセージを追加し、特定の方法に認証失敗-URLを指し示すことによってそれを解決: ' ... ' とLoginControllerで : ' @RequestMapping(方法= RequestMethod.GET) public String fail(HttpSessio nセッション){ flashMessageHelper.addError(MessageKey.SIGN_IN_FAILURE、session); return PathHelper.getRedirectToPath(linkHelper.getHome()); } ' – Ryan

0

ログインjspページでは、このログインページにリダイレクトされる前にアクセスしようとしたページを示すHTTPヘッダーリフェレーターを取得できます(例:jstl - ${header['referer']})。

0

ログインページにエラーメッセージを表示するのは、春のauthomaticalyで行われたことです。あなたはそれがどのように議論されているか見ることができますhere。私はこれがログインのエラーを「悪い資格情報」として表示することに関するものだと思いますが、とにかくそれを念頭に置いてください。

あなたの場合、アクセス拒否に関するエラーメッセージを表示するには、春のセキュリティ設定でアクセス拒否ページを定義するだけです。

<http auto-config="true" access-denied-page="/login.jsp?myError=access-denied"> 
.... 
</http> 
0

私は「ドン:myError変数はリクエストに来る場合

<http auto-config="true" access-denied-page="/403.jsp"> 
.... 
</http> 

だけでなく、あなたはログインJSPでこのおよび制御を行うことができます。

通常、次のように表示することができますここでの答えのいずれかが、元の問題に対するクリーンな汎用ソリューションを提供すると思います。私はOPの解を理解しておらず、彼の状況に固有のものかもしれません。

ユーザーが保護されたURLをクリックすると、springはユーザーをログインページにリダイレクトします。元の要求はセッションに格納されます。そして、springは元のリクエストのパラメータをログインページに渡しません。

あなたがのlogin.jspに次のようなものを追加することができます。

LOGINMSGあなたは、元のセキュアなURLに追加カスタムエンドユーザーのログインメッセージである
<% 
     if((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST") != null && ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG") != null){ 
    out.println('<%= ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG")[0]%>');  
     } 
     %> 

私は、春のセキュリティチームがこのアプローチに着目し、検証する(または無効にする)ことを願っています。

+0

こんにちは。私はこの正確な解決策を働かせようとしています。私の質問は、jspがピックアップするためのセッションにLOGINMSGを置くJavaコードをSpringに呼び出させる方法です。私はそれが何らかのフィルターだと確信していますが、それは認証フィルターではありません。ログインページのセッションに関する余分な情報を入れるJavaコードの私のビットを呼び出すようにSpringを設定するにはどうしたらいいですか? – Jake

関連する問題