2011-01-11 10 views
2

Javaサーブレットを使用してWebサイトを作成しており、LogInというページがあります。私は何をしたいのですか?ユーザーがログインフォームを正常に入力すると、以前にあったページに戻します。302リダイレクト後のHTTP Referer

これは、前のページがRefererヘッダーに格納されているため、これはGETまたは別のページのPOSTで正常に動作します。しかし、私が(ログインしていないためにユーザーがアクセスできないページから)LogInページに(302)をリダイレクトすると、Refererヘッダーはnullになります。

ユーザが[ログイン]ページにリダイレクトされたときに達成したいことはありますか?

答えて

2

あなたがブラウザに依存しているので、それが送信されているかどうかにかかわらず、私はリファラーヘッダを信用しません。むしろ、現在のリクエストURIに基づいて自分自身を提供してください。

response.sendRedirect("login?from=" + URLEncoder.encode(request.getRequestURI(), "UTF-8")); 

してからログインフォームで

<form action="login" method="post"> 
    <input type="text" name="username"> 
    <input type="password" name="password"> 
    <input type="hidden" name="from" value="${param.from}"> 
    <input type="submit"> 
</form> 

してからログインアクション

User user = userDAO.find(username, password); 
if (user != null) { 
    session.setAttribute("user", user); 
    response.sendRedirect(request.getParameter("from")); 
} else { 
    request.setAttribute("error", "Unknown login"); 
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); 
} 

更新中:またはあなたがなりたい場合は、パラメータレス(他の答えに対するあなたのコメントに従って)、(ab)セッションを使用します。

session.setAttribute("from", request.getRequestURI()); 
response.sendRedirect("login"); 

してからログインアクションで

response.sendRedirect((String) session.getAttribute("from")); 
session.removeAttribute("from"); 
+0

さて、GETのparametresは本当にそれを行う唯一の方法ですか? URLを非常に短く意味のあるものにしようとしています。残念ながら、これはGETパラメータを意味しません。 – DanielGibbs

+0

他の回答にあなたのコメントを見た後、私はすでに回答を1秒更新しました。 F5を押してください。 – BalusC

+0

ああ、セッション乱用。私はすでにどこかでそれを使用しているかもしれないと思うので、ここでもそれを使うかもしれません。ありがとう! – DanielGibbs

1

現在のページをGETパラメータ、つまりhttp://yoursite.com/login?redir=/topicsに追加して、認証サーブレットでユーザーに適切な資格情報がない場合は、現在のURIを取得し、ログインURLに追加してリダイレクトします。

+0

はい、それは可能ですが、この特定のサイトで、私たちは、URLが非常に短く、有意義なものにしようとしているので、残念ながら、これは何のGET parametresを意味しません。 – DanielGibbs

+0

クッキーを削除したり、セッション内にバリューを保存したりすることがありますか?私は個人的には解決策が気に入らないが、もっともらしい。 – Ryan

+0

さて、私はすでにどこかでそれを使っているかもしれないと思うので、かなり妥当な解決策です。ありがとう! – DanielGibbs

関連する問題