2017-12-29 38 views
0

In meinem Login-Servlet zu funktionieren scheint, ist der letzte Code von doPost wie folgt:Die Java-Servlet-Http nicht sofort

<%@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> 
... 
:

HttpSession session = request.getSession(); 
session.setAttribute(Config.CURRENT_USER_PARAMETER, user); 
request.getRequestDispatcher("app.jsp").forward(request, response); 

Was app.jsp kommt, wird es wie folgt

Mein Problem ist das folgende Szenario:

  1. Ich login über das HTML-Formular, das mit meinem lo verbunden ist Gin Servlet. Das Login-Servlet erstellt einen HttpSession und fügt ein Attribut für das Objekt hinzu, das den betreffenden Benutzer beschreibt.
  2. Schließlich geht es weiter zu app.jsp.

Das Problem ist, dass, wenn ich zu app.jsp bin angemeldet und weitergeleitet, sehe ich alles, was ich bin sehen soll, aber wenn ich .../app.jsp in der Adressleiste eingeben und die Eingabetaste drückt es Umleitungen an index.html! Allerdings, wenn ich app.jsp die zweite, dritte, usw. Zeit besuchen, ist alles in Ordnung und keine unechten Umleitung zu index.html geschieht.

Ist diese Lösung aus Sicherheitsgründen angemessen?

beschloß ich das Problem, indem Sie die folgende Zeile in dem Login-Servlet hinzu:

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); 

Und in app.jsp ich habe:

<%@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> 
... 

meine eigene Frage zu beantworten

Im Login-Servlet Alles was ich tue ist:

HttpSession session = request.getSession(); 
session.setAttribute(Config.CURRENT_USER_PARAMETER, user); 
response.sendRedirect("app.jsp"); 

Auf diese Weise ist das Benutzerobjekt direkt von der session verfügbar und ich muss diesen Benutzer nicht auf das Anfrageobjekt setzen.

Antwort

0

Es scheint, dass Sie versuchen, auf eine Seite außerhalb Ihres Kontexts zu gelangen.

Durch Ihre Frage, ich bin nur Ihr Verzeichnis zu erraten ist: /index.html /app.jsp

Wenn Sie Ihre Anwendung ausführen, unter Sie wahrscheinlich eine URI wie: http://[my_server]/[my_app]/index.html oder : http://[my_server]/[my_app]/

Wenn Sie ../app.jsp eingeben, versuchen Sie, etwas zu bekommen, das nicht da ist. Ihr Server ist wahrscheinlich so eingestellt, dass er eine Standardseite von index.html ohne eine Standardfehlerseite sendet.

Ich rate, dass Sie nur die index.html Seite wegen der falschen URI zurückbekommen.