4

Javaサーブレットを使用してWebサイトを作成していますが、LogInというページがあります。私がしたいのは、ユーザーがログインフォームに正常に入力すると、以前のページにユーザーが戻ることです。

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

ユーザーがログインページにリダイレクトされたときに私が望むことを達成する方法はありますか?

4

2 に答える 2

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");
于 2011-01-11T20:56:53.517 に答える
1

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

于 2011-01-11T20:54:09.750 に答える