2017-01-10 5 views
0

私はwebsphere jeeフォーム認証を使用していて、エラーページに入力したj_usernameを戻したいとします。ログイン失敗後にj_usernameを読み取ることができません

カスタムフィルタを使用してj_security_checkへの呼び出しを傍受し、リクエストにj_usernameパラメータを属性として追加しましたが、エラーページまたはコントローラで属性をチェックすると、常にnullになります。パラメータj_usernameがj_security_checkにアクセスする前にフィルタで検出されました。問題はlogin attempに失敗した後です。

エラーURLにリダイレクトするとj_usernameとj_passwordが渡されない場合のwebsphereの理由と、ログインエラーページでj_usernameにアクセスするにはどうすればよいですか。

+0

なぜですか?ユーザーは入力した内容を知っています。なぜ彼がすでに知っていることを彼に伝える必要があるのですか? – EJP

+0

最初に、それは質問に答えなかった。しかし、好奇心が強い場合は、顧客が誤植を避けて、入力した内容を想起させるように求めることはできないなど、多くの理由があります。または、ユーザー名がDBに存在しないため、ログインに失敗したかどうかを確認したい場合は、適切なエラーメッセージを表示するか、サインアップページにリダイレクトします。多くの理由がありますが、私は質問よりも答えにもっと興味があります:) –

答えて

0

解決策は簡単でした。私は、アクションが/ j_security_checkのときにwebsphere 8.5がセッションを作成することを発見しました。だから、そのセッションにj_usernameパラメータを格納するために/ j_security_checkのためのWebフィルタを使い、ログインに失敗したときに$ {sessionScope [STORED_USERNAME]}を使ってそのセッションからユーザ名を取得しました。

希望のあるヘルプ

0

ログインエラーが発生した場合、j_usernameはゼロになります。おそらく、あなたのフィルタのリクエストからログイン名を取得し、それをrequest.getParameter( "j_username")を使ってエラーページに渡す必要がありますか?

セキュリティの観点から言えば、エンドユーザーには情報が少なくて済みます。私は、ユーザー名が存在し、パスワードが悪いとエンドユーザーに伝えません。なぜなら、誰かがアカウントをハッキングしようとしていると、「ユーザー名が有効です」という知らなかった情報を1つ与えたからです。私は入力したユーザー名を表示しますが、単に「ユーザー名が存在しないか、パスワードが無効です」と曖昧にしています。このようにして、有効なユーザーは、ユーザー名を間違って入力したかどうかを知ることができますが、ハッカーは正しいかどうかを知りません。

+0

j_usernameは、サーバーがエラーページにリダイレクトされたときにゼロになります。セキュリティ上の理由から、ユーザーに情報を表示することに同意します。しかし、このアプリケーションは社内向けであり、一般向けではありません。しかし、情報ありがとう –

+0

右。したがって、ログインを呼び出す前にrequest.getParameter()を使用してユーザー名をプルできるようにし、ログインページを保存してエラーページに渡すことができます。 –

関連する問題