2011-12-25 14 views
5

Powiel możliwe:
How to redirect to another page when already authenticated user accesses login pagePrzekierowanie do strony głównej, jeśli użytkownik jest już zalogowany

Jeśli zalogowany użytkownik kliknie login.jsp strony to powinien być automatycznie przekierowany do swojego home.jsp. Przed uwierzytelnieniem użytkownik przechodzi do login.jsp i po pomyślnym uwierzytelnieniu przez serwlet (doPost) zostaje przekierowany do home.jsp, ale gdy ponownie ten sam użytkownik kliknie na stronę logowania, powinien on zostać automatycznie przekierowany do home.jsp zamiast ponownie się logować. Jak mogę to zrobić w JSP/Servlet? Ustawiam sesję z tego serwletu po pomyślnym uwierzytelnieniu.

Przed zalogowaniem użytkownik klika na login.jsp i przechodzi do metody serwletu doPost() i przechodzi do home.jsp. Po pomyślnym zalogowaniu, jeśli użytkownik kliknie ponownie na login.jsp, zamiast przejść do login.jsp, kontrola powinna przejść bezpośrednio do home.jsp. Jak mogę to zrobić?

Jeśli użytkownik jest wylogowany to dopiero po kliknięciu login.jsp kontrolę trafi do login.jsp a następnie doPost() od serwletu i wreszcie home.jsp przyjdzie.

Odpowiedz

8

wypróbować ten kod w swoim login.jsp

if(session.getAttribute("authenticated")!=null && session.getAttribute("authenticated").equals(true)) 
{ 
    response.sendRedirect("home.jsp"); 
} 
+0

muszę ustawić przed uwierzytelnieniem? – sujit

+0

Tak, gdy użytkownik pierwszy raz zaloguje się login.jsp i pomyślnie się uwierzytelnia, to taki atrybut tworzy się w ten sposób. session.setAttribute ("authenticated", true); –

+1

strona logowania znajduje się na głównej stronie głównej, więc po uwierzytelnieniu z serwletu, jeśli użytkownik wejdzie na tę główną stronę główną i kliknie login.jsp, to czy zostanie przekierowany do home.jsp? – sujit

0

za pomoc Pisałem przykład i wykonywanego kodu w moim komputerze.

Na stronie serwletu, w doPost:

String username = request.getParameter("username"); 
String password = request.getParameter("password"); 
boolean isCredentialValid = validateCredentials(username, password); 
String nextPage =""; 
HttpSession session = request.getSession(true); 
if(isCredentialValid){ 
    nextPage = "home.jsp"; 
    session.setAttribute("isLoggedIn", "true"); 
}else{ 
    request.setAttribute("error", "Either username or password is invalid."); 
    nextPage ="login.jsp"; 
} 
RequestDispatcher rd = request.getRequestDispatcher(nextPage); 
rd.forward(request, response); 

w login.jsp

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
<script type="text/javascript"> 
    var isLoggedIn = "<%= (String)session.getAttribute("isLoggedIn")%>"; 
    if(isLoggedIn === "true") 
    window.location.href="home.jsp"; 
    } 
</script> 
</head> 
<body> 
    <form action="Test" method="post"> 
    ${error} 
    <br/> 
    UserName : <input type="text" name="username"/> 
    <br/> 
    Password : <input type="text" name="password"/> 
    <br/> 
    <input type="submit" value="submit"/> 
    </form> 
</body> 
+0

muszę napisać to w login.jsp? – sujit

+0

nope .. strona logowania zostanie przekierowana do serwletu .. napisz w serwletie, ponieważ nie możesz sprawdzić poprawności poświadczeń w przeglądarce, tak jak na to rozumiem, będziesz musiał skontaktować się z bazą danych poprzez prawicę serwletu. –

+0

Strona logowania zostanie przekierowana do serwletu dopiero wtedy, gdy użytkownik poda swoją nazwę użytkownika i hasło, jeśli wcześniej był już uwierzytelniony, gdy kliknął link login.jsp, a następnie zamiast strony login.jsp, a następnie, jak będzie wyglądać strona login.jsp automatycznie przekierowany do serwletu? – sujit

3

Bądź czek strona logowania/działania, jeśli użytkownik jest zalogowany, a przekierowanie do strony głównej, jeśli zalogowany :

if (alreadyLoggedIn) { 
    response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/home")); 
    return; 
} 

Ale nie należy zapewne masz link do logi n strona w pierwszej kolejności, jeśli użytkownik jest już zalogowany.

+0

dzięki JB .... ale co powinienem napisać w doPost serwletu? – sujit

+0

Mam link do strony logowania, nawet jeśli użytkownik jest już zalogowany. Powinienem napisać home.jsp zamiast/home .. tak: response.sendRedirect (response.encodeRedirectURL (request.getContextPath() + "/home.jsp")); – sujit

Powiązane problemy