2014-10-05 11 views
5

Próbuję utworzyć stronę rejestracji przy użyciu serwletów. Stworzyłem podstawową stronę HTML, która ma formularz z danymi wejściowymi dla nazwy użytkownika i hasła. Teraz muszę przechowywać informacje przesłane do formularza za pomocą plików cookie/sesji. Następnie na stronie logowania użytkownik musi być w stanie zalogować się przy użyciu informacji podanych wcześniej. Więc w zasadzie muszę wiedzieć, jak przechowywać nazwę użytkownika i hasło.Przechowywanie nazwy użytkownika, hasła przy użyciu plików cookie/sesji - Java Servlets

Więc jeśli zarejestrowałem się przy użyciu nazwy użytkownika: admin i hasła 123, a następnie zarejestruję się przy użyciu nazwy użytkownika: użytkownik i hasło: 12345, nie powinienem być w stanie zalogować się przez admin i 12345 lub przez użytkownika i 123. Dzięki !!

formularza HTML

<html> 
    <head> 
     <title>Registration</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body bgcolor="lightblue"> 

    <center> 
     <h1></h1> 
     <br> 

     <hr> 
     <br><br> 
     <form action="/Registration" method="get"> 
      <h3> Please register to start </h3> 
Username: <input type="text" name="userName"> 
<br> 
Password: <input type="password" name="password"> 
<br> 
<br> 
<input type="submit" value="Register"> 
<br><br> 
</form> 
    </center> 
    </body> 
</html> 

Java Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 

     // Create cookies for first and last names.  
     Cookie userName = new Cookie("userName", 
         request.getParameter("userName")); 
     Cookie password = new Cookie("password", 
         request.getParameter("password")); 

     // Set expiry date after 24 Hrs for both the cookies. 
     userName.setMaxAge(60*60*24); 
     password.setMaxAge(60*60*24); 

     // Add both the cookies in the response header. 
     response.addCookie(userName); 
     response.addCookie(password); 
+0

Witamy w przepełnieniu stosu. Ta strona jest ukierunkowana na specyficzne pytania z konkretnymi odpowiedziami. Dałeś nam dość wysokie wymagania i ścianę kodu, która jest nie na temat tej witryny. Powinieneś przeczytać kilka samouczków, spróbować, a jeśli masz konkretne pytanie po drodze, możesz poprosić o to tutaj. Słowo ostrzeżenia: wszystko, co ma związek z bezpieczeństwem, jest trudne, a konsekwencje tego, że coś jest nie tak, są dość poważne, więc lepiej być może, korzystając z frameworka, który sobie z tym poradzi. – yshavit

Odpowiedz

4

Cookies są przechowywane po stronie klienta i są wysyłane do serwera z każdego żądania. Nie jest dobrą praktyką dodawanie haseł do plików cookie, ponieważ są one łatwo przechwytywane, aw wielu przypadkach pozostają w przeglądarce użytkowników nawet po opuszczeniu witryny.

Powinieneś polegać na sesji, Java EE pozwala utworzyć sesję z użytkownikiem, w której przez nią będzie przechowywany identyfikator sesji, który następnie będzie wysyłany z każdym żądaniem. Zamiast tego możesz przechowywać informacje o tym użytkowniku na serwerze.

Tutaj, za pomocą kodu, można utworzyć sesję.

// get the session, add argument `true` to create a session if one is not yet created. 
HttpSession session = request.getSession(true); 

session.setAttribute("userName", request.getParameter("userName")); 
session.setAttribute("password", request.getParameter("password")); 

// to get the username and password 
String userName = session.getAttribute("userName"); 
String password = session.getAttribute("password"); 

Oczywiście, jeśli robisz to w ten sposób, po wyczyszczeniu serwerów pamięci podręcznej nazwy użytkowników i hasła zostaną usunięte. Również niezaszyfrowane hasła w pamięci podręcznej serwerów z pewnością budzą obawy.


Edit:

Jeśli 2 osoby były w użyciu tego samego komputera nie wtedy, powyższy kod nie będzie działać dobrze. Dzieje się tak, ponieważ poświadczenia użytkowników są przechowywane tylko w sesji, nie ma nic, co trwałoby po zniszczeniu sesji lub nadpisaniu danych w sesji. Wyobraź sobie, że sesja jest obiektem bezpośrednio związanym z każdym użytkownikiem. Więc teraz jestem na StackOverflow gdzie gdzieś w ich kodzie jest specjalny obiekt tylko dla mnie i mojej przeglądarki (sesji!), W obiekcie sesji jest coś jeszcze, co mówi, że aktualny zalogowany użytkownik to ja. Rzucam Ci wyzwanie, aby zastanowić się, w jaki sposób możesz przechowywać referencje użytkowników poza sesją i zamiast tego zapisywać aktualnie zalogowanego użytkownika w sesji.

Aby dowiedzieć się więcej o sesjach i ich działaniu, można znaleźć tutaj wspaniałą odpowiedź: What are sessions? How do they work?.

+0

Dzięki za odpowiedź! Jeśli więcej niż jeden użytkownik miałby zarejestrować się podczas tej samej sesji, czy ten kod zadziałałby?Również otrzymuję ten błąd nie można znaleźć symbol symbol symbol: metoda addAttribute (ciąg, ciąg) lokalizacja: sesja zmiennej typu HttpSession – newbdeveloper

+1

To session.setAttribute(), nie addAttribute(); –

Powiązane problemy