Мне нужно реализовать простую аутентификацию пользователя сервлета (в 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);
}
}
Таким образом, вы могли бы помочь мне с пониманием, что? Как реализовать аутентификацию пользователя и сохранить пользователя во время сеанса?
Я бы подумал использовать Spring Security, если можно. Роллинг собственного решения безопасности - это, как правило, плохая идея. JSESSIONID автоматически устанавливается вашим контейнером сервлета. –
@MikePalfrey Я не использую рамки для образовательных целей, поэтому я не могу использовать Spring Security –
@MikePalfrey, так что, знаете ли вы, что может быть неправильно в моем коде? –