2015-11-26 3 views
0

Мне нужно реализовать простую аутентификацию пользователя сервлета (в Java Dynamic Web Project), но есть вещи, которые меня немного путают.Проверка подлинности сервлета с использованием сеансов и файлов cookie

Во-первых, сервлет по какой-то причине создает cookie JSESSIONID, хотя я никогда не прошу об этом. И кроме того, я не могу изменить его значение, если я request.addCookie(new Cookie("JSESSIONID", session.getId())), он делает что-то вроде этого:

Cookie: JSESSIONID=6B5B441038414B4381EDB7470018F90E; JSESSIONID=7890D45DF445635C49BDEB3CADA8AD99; ....... 

так, он дублирует печенье.

Во-вторых, я не уверен, где сравнить печенье и идентификатор сеанса, и где и как правильно создать сеанс (т.е. request.getSession(true?/false?/nothing?);)

Я прочитал некоторые документы, но по-прежнему нуждаются в помощи.


У меня есть сервлет HomeServlet который Шоуда перенаправлять пользователя на authentication странице, если пользователь не прошел проверку подлинности.

Вот как я это (HomeServlet.java):

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

     if(request.getSession().getAttribute("user") != null) { 
      request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); 
     } else { 
      response.sendRedirect("authentication"); 
     } 
    } 

И я также AuthServlet который служит Jsp страницу с формами аутентификации и проверяет пользователей.

AuthServlet.java:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    String action = request.getParameter("ACTION"); 

    if ("login".equals(action)) { 
     String[] result = doSomeValidations(); 

     if (result.size() > 0) { // show validation errors 
      request.setAttribute("errorLoginMessage", result); 
      request.setAttribute("email", email); 
      doGet(request, response); 
     } else { // authenticate user 
      request.getSession().setAttribute("user", userObject); 
      request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); 
     } 
    } else if ("signup".equals(action)) { 
     // ...........................   
    } else { 
     doGet(request, response); 
    } 
} 

Таким образом, вы могли бы помочь мне с пониманием, что? Как реализовать аутентификацию пользователя и сохранить пользователя во время сеанса?

+0

Я бы подумал использовать Spring Security, если можно. Роллинг собственного решения безопасности - это, как правило, плохая идея. JSESSIONID автоматически устанавливается вашим контейнером сервлета. –

+0

@MikePalfrey Я не использую рамки для образовательных целей, поэтому я не могу использовать Spring Security –

+0

@MikePalfrey, так что, знаете ли вы, что может быть неправильно в моем коде? –

ответ

4

Во-первых, сервлет по какой-то причине создает куки JSESSIONID хотя я никогда не спрашиваю его

HttpSession jsession = request.getSession(); 

вы запрашиваете сессию здесь и JSESSIONID печенье создается контейнер в ответ

Как правильно создать сеанс request.getSession (true?/False?/Nothing?);

request.getSession() и request.getSession(true) точно так же они начинают новую сессию, если это необходимо, но request.getSession(false) означает, что если уже есть использование сеанса, но если нет, не начинать ее. Как и где вы хотите, чтобы начать сеанс зависит полностью от ваших требований

response.addCookie(new Cookie("JSESSIONID", jsession.getId())); 

вы не suppossed, чтобы добавить JSESSIONID Cookie себя, контейнер будет делать это для вас.

Также вы должны создать сеанс один раз в своем приложении после того, как cookie JSESSIONID будет сохранен в браузере пользователя (при условии, что файлы cookie включены), он будет отправлен вместе с запросом.

Как реализовать проверку подлинности пользователя

Очень субъективна и зависит от требований, вы можете прочитать https://docs.oracle.com/cd/E19226-01/820-7627/bncby/index.html

держать пользователь, вошедший в течение всей сессии

Файлы cookie сеанса помогут вам в этом, как только пользователь будет аутентифицирован, в качестве примера войдите в facebook и откройте вкладку файлов cookie

Смежные вопросы