2017-12-29 73 views
0

を動作するようには思えない、次のように、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> 
... 

私の問題は以下のシナリオです:

  1. 私は私のloに接続されたHTML形式でログインしますジンサーブレット。
  2. ログインサーブレットはHttpSessionを作成し、問題のユーザーを記述するオブジェクトの属性を追加します。
  3. 最後に、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から直接利用でき、そのユーザをリクエストオブジェクトに入れる必要はありません。

答えて

0

コンテキスト外のページにアクセスしようとしているようです。あなたの質問によって

は、私はあなただけのディレクトリを推測していますと、次のとおりです。 /index.htmlが /app.jsp

アプリケーションを実行している、のようなあなたはおそらく間URI: http://[my_server]/[my_app]/index.html か、単に: http://[my_server]/[my_app]/

../app.jspと入力すると、そこにないものを取得しようとしています。あなたのサーバはおそらく、デフォルトのエラーページを持たないindex.htmlのデフォルトページを送るように設定されています。

誤ったURIのため、index.htmlページを取得していると思います。

関連する問題