を動作するようには思えない、次のように、doPost
の最後のコードは次のとおりです。は、JavaサーブレットのHttpSessionが私のログインサーブレットでは、すぐに
HttpSession session = request.getSession();
session.setAttribute(Config.CURRENT_USER_PARAMETER, user);
request.getRequestDispatcher("app.jsp").forward(request, response);
app.jsp
に来る何を次のように、それは次のとおりです。
<%@page import="fi.vakuutustiedot.controllers.Config"%>
<%@page import="fi.vakuutustiedot.model.User"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
if (session == null) {
request.getRequestDispatcher("index.html").forward(request, response);
return;
}
User user = (User) session.getAttribute(Config.CURRENT_USER_PARAMETER);
if (user == null) {
session.invalidate();
request.getRequestDispatcher("index.html").forward(request, response);
return;
}
%>
<!DOCTYPE html>
...
私の問題は以下のシナリオです:
- 私は私のloに接続されたHTML形式でログインしますジンサーブレット。
- ログインサーブレットは
HttpSession
を作成し、問題のユーザーを記述するオブジェクトの属性を追加します。 - 最後に、
app.jsp
に転送します。
問題は、私がapp.jsp
にログインして、転送していたとき、私は、ロケーションバーに.../app.jsp
を入力し、Enterキーを押します場合しかしはそれがindex.html
にリダイレクトし、すべては私が見ることになっています見ることです!しかし、私がapp.jsp
に2番目、3番目、.etc時間を訪問すると、すべてが正常であり、index.html
への偽のリダイレクトは起こりません。
このソリューションはセキュリティの観点から適切ですか?
HttpSession session = request.getSession();
request.setAttribute(Config.CURRENT_USER_PARAMETER, user); // <- The new added line.
session.setAttribute(Config.CURRENT_USER_PARAMETER, user);
request.getRequestDispatcher("app.jsp").forward(request, response);
そしてapp.jsp
に私が持っている:
<%@page import="fi.vakuutustiedot.controllers.Config"%>
<%@page import="fi.vakuutustiedot.model.User"%>
<%@page import="fi.vakuutustiedot.model.UserType"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%! User user = null; %>
<%
if (session == null) {
request.getRequestDispatcher("no_session.html").forward(request, response);
return;
}
user = (User) session.getAttribute(Config.CURRENT_USER_PARAMETER);
if (user == null) {
user = (User) request.getAttribute(Config.CURRENT_USER_PARAMETER);
}
if (user == null) {
request.getRequestDispatcher("test.jsp").forward(request, response);
return;
}
%>
<!DOCTYPE html>
...
は、ログインサーブレットで自分の質問
に答える
私は、ログインサーブレットに次の行を追加することで問題を解決しました私がしているのは、
HttpSession session = request.getSession();
session.setAttribute(Config.CURRENT_USER_PARAMETER, user);
response.sendRedirect("app.jsp");
です。 0
そのようにして、ユーザオブジェクトはsession
から直接利用でき、そのユーザをリクエストオブジェクトに入れる必要はありません。