JSP: Wie um zu überprüfen, ob ein Benutzer angemeldet ist?
Ich bin Java zu lernen Web, aber ich habe einige Probleme und ich brauche Hilfe.
Ich benutze eine Vorlage.jsp in der die ich-header.jsp, footer.jsp login.jsp (die linke Seite der Vorlage ) und ${param.content}.jsp
. Für jede Seite mit dem Namen X. jsp habe ich eine andere jsp mit folgendem Inhalt, denn ich möchte jede Seite dasselbe layout:
<jsp:include page="template.jsp">
<jsp:param name="content" value="X"/>
<jsp:param name="title" value="Start navigate"/>`enter code here`
</jsp:include>
Wenn ich auf den Review-link,zum Beispiel, will ich einen redirect zu Überprüfen.jsp, aber ich habe einige Probleme.
In der Fußzeile.jsp-ich habe so etwas wie dieses:
(...)
< a href =" Review.jsp "> Review </a>
(...)
Nach dem login, ich versuche, klicken Sie auf Überprüfen, schickt er mich auf die Review.jsp, aber es zeigt mir, dass ich nicht angemeldet. Ich benutze das Spring-Framework, Tomcat 7, Eclipse, MySQL. Wenn ich mich einlogge, ich einen cookie:
String timestamp = new Date().toString();
String sessionId = DigestUtils.md5Hex(timestamp);
db.addSession(sessionId, username, timestamp);
Cookie sid = new Cookie("sid", sessionId);
response.addCookie(sid);
Für jede Methode, ich habe so etwas (ich habe das in einem tutorial):
@RequestMapping(value = "/writeReview", method = RequestMethod.GET)
public String nameMethod(@CookieValue("sid") String sid,...)
Verwendung der sid, kann ich herausfinden, wer der Benutzer ist. Ich habe eine Datenbank mit dem Konto des Benutzers und einige andere Tabellen. Das problem ist, dass wenn ich auf überprüfen oder alle anderen, es zeigt mir, dass ich nicht angemeldet. Was kann ich tun?
UPDATE:
Ich benutze JavaBean für die Benutzer-und login.jsp. Das JSP, das die text-box für den login, ich habe eine GET-Methode, wenn ich auf den button, um sich anzumelden.
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView createCookie(
@RequestParam("username") String username, @RequestParam("password") String password,
HttpServletRequest request, HttpServletResponse response) throws SQLException {
//code for creating the cookie here, after testing if the user is in my database
}
Für jede Seite, sende ich die sid und ich haben ein Attribut für das Modell, Benutzername:
public String methodName(@CookieValue(required = false) String sid, Model model) {
if (sid != null) {
User user = getUserBySid(sid);
model.addAttribute("user", user);
}
(..other data.)
return "nameJSP.jsp";
}
Ich überprüfen in jeder JSP-wenn der username ist nicht leer, so ich sehen, ob ein Benutzer angemeldet ist. Die Anwendung geht gut, geht es Parameter, wenn ich nicht klicken Sie auf die links aus dem header oder footer. Das problem ist, dass ich mich übergeben muss , sagen wir mal, einen parameter aus einer JSP-wer ist der eigentliche Inhalt, das layout, um die JSP-bezeichnet durch die Fußzeile und diese JSP wird der nächste Inhalt von meinem layout. Das layout erkennt nur die Inhalte und Titel:
<title>${param.title}</title>
(I didn't paste all the code, I use a table <table>....)
<%@ include file="header.jsp"%>
<%@ include file="login.jsp"%>
<jsp:include page="${param.content}.jsp"/>
<%@ include file="footer.jsp"%>
Also wie kann ich einen parameter in dieser JSP-Datei, die empfangen werden von einem anderen JSP? Es wird auch auf die zugegriffen werden durch das layout.jsp und an den footer oder den header?
<jsp:include page="layout.jsp">
<jsp:param name="content" value="X"/>
<jsp:param name="title" value="Start navigate"/>
</jsp:include>
- btw sollte Man nicht generieren session-ID selbst - es ist der Tomcat job. Und bitte angeben, wie genau <Zitat>es zeigt mir, dass ich mich nicht angemeldet</Zitat>
- In der Regel, wenn Sie die benutzerdefinierte login-system, so zu sagen, von hand, nach Authentifizierung, die Sie hinzufügen, Benutzer-Daten (die beste Weise ist, um einige benutzerdefinierte User-Klasse), um die Sitzung wie diese:
request.getSession().setAttribute("loggedInUser", user);
, wo loggedInUser nur einige string-Bezeichner. Und es ist Tomcat generiert die erforderlichen session-id - Betrachten Sie diese Antwort von @BalusC, vielleicht wird es helfen Sie bekommen einige Hinweise: stackoverflow.com/a/1946121/814702
- Ich habe einige neue Dinge über meinen code.
- Und noch eine Anmerkung: es ist sehr empfohlen zu verwenden, doPost() oder, im Falle der Frühling
method = RequestMethod.POST
für die controller, die sich mit dem einloggen, sonst sensible Informationen werden sichtbar in der URL - Einige parameter(s) auf der mitgelieferten JSP:
<jsp:include page="somePage.jsp" > <jsp:param name="param1" value="someValue" /> <jsp:param name="param2" value="anotherParam"/> .... </jsp:include>
Sie tun es bereits
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige parameter(s) auf der mitgelieferten JSP:
Du tust es bereits.
OK, die details der Frage nicht ganz klar, aber bekomme ich die Idee.
Eine Lösung könnte die folgende sein.
In Ihrem Login Aktion, wenn die Authentifizierung erfolgreich war, erstellen HttpSession und ein Attribut für den authentifizierten Benutzer:
Und in den code, wo Sie die Kontrolle, ob der Benutzer angemeldet ist, nur überprüfen Sie das Vorhandensein der entsprechenden HttpSession Attribut:
Oder in Ihrem JSP-Seite, die Sie überprüfen können, ob der Benutzer angemeldet ist mit JSTL - tags, wie gezeigt durch BalusC im Beispiel hier:
Filter zur Rettung
Aber in der Regel, die Sie überprüfen, ob der Benutzer angemeldet ist, um den Zugriff auf einige Seiten (also nur authentifizierte Benutzer Zugriff hat). Und Sie schreiben Klasse, die javax.- servlet.Filter.
Hier ist ein Beispiel für die LoginFilter aus einem meiner Projekte:
In diesem Projekt habe ich das gute servlets und JSP-ohne Frühling, aber Sie erhalten die Idee.
Und natürlich, Sie muss konfigurieren web.xml, um diesen filter verwenden:
Hinweis:
Wenn Sie eine Web-Container oder Application Server, dass unterstützt die Servlet-version 3.0 und höher können Sie dann mit Anmerkungen versehen Sie Ihre filter-Klasse mit @WebFilter annotation in diesem Fall gibt es keine Notwendigkeit, konfigurieren Sie den filter in die deployment-descriptor (web.xml). Finden Sie ein Beispiel für die Verwendung @WebFilter annotation und mehr Filtern Verwandte Informationen hier.
Hoffe, dies wird Ihnen helfen.
Oder nutzen Sie einfach: