getSession().getAttribute(“…”) = null?

236
16 августа 2017, 16:59

Есть сервлет авторизации

@WebServlet(
    name = "SignInServlet",
    description = "Вход пользователя - проверка имени email и пароля",
    urlPatterns = {"/authorization_signin"}
    )
public class SignInServlet extends javax.servlet.http.HttpServlet {
public SignInServlet(){
}
protected void doPost(HttpServletRequest request,
                      HttpServletResponse response) throws javax.servlet.ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    UserDataSet user = new UserDataSet();
    SignInModel modelSignIn = new SignInModel();

    user.setEmail(request.getParameter("email"));
    user.setPassword(request.getParameter("password"));
    user = modelSignIn.doSignIn(user);
    if (request.getSession().getAttribute("loggedUser") == null) {
        if (user != null) {
            request.getSession().setAttribute("loggedUser", user);             request.getRequestDispatcher("authorization.jsp").forward(request, response);
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            request.setAttribute("errorMessage", "Email or password is incorrect");
            request.getRequestDispatcher("index.jsp").forward(request, response);
            response.setStatus(HttpServletResponse.SC_OK);
        }
    }
}
@Override
 protected void doGet(HttpServletRequest request,
                  HttpServletResponse response) throws ServletException, IOException{
    response.setContentType("text/html; charset=utf-8");
    response.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
}

При авторизации переходим на страницу "authorization.jsp"

<body>
<%
if (request.getSession().getAttribute("loggedUser") != null){
    UserDataSet user = (UserDataSet) request.getSession().getAttribute("loggedUser");
    System.out.println("In author :" + request.getSession().getAttribute("loggedUser"));
%>
<h1> Hello <%= user.getFirstName() %> <%= user.getLastName() %>!</h1>
<h2>AUTORIZED!</h2>
 <a href="/authorization_logout">Log Out</a>
 <%
 }
else {
%>
 <h1>IDI DOMOI</h1>
 <%
}
 %>
 </body>

Браузер переходит на эту страницу и выводит указанные данные

НО, если ручками в строке URL перейти на localhost:8080 затем сразу попытаться перейти на "authorization.jsp"

то включится фильтр

@WebFilter(filterName = "LoginFilter")
public class LoginFilter implements Filter {
public void destroy() {
}

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest httpRequest = (HttpServletRequest) req;
    HttpServletResponse httpResponse = (HttpServletResponse) resp;
    System.out.println("Enter filter");
    System.out.println("Filter session: " + httpRequest.getSession(false).getAttribute("loggedUser"));

    UserDataSet user = (UserDataSet) httpRequest.getSession(false).getAttribute("loggedUser");
    if (user != null) {
        System.out.println("CHAIN");
        chain.doFilter(req, resp);
    } else {
        httpResponse.sendRedirect("/");
        System.out.println("Not signin");
    }
}
public void init(FilterConfig config) throws ServletException {
}
}

то фильтр скажет что сессия не существует Не пойму почему она умирает...

Также если после авторизации ручками, через строку URL перейти на любую страницу *.jsp где проверяется сессия то сессии нет...

Что делаю не так ?

Answer 1

Ответ был найден на англоязычном "собрате"

в JSP файлах нужно проверять сессию не через request - там его не будет, нужно проверять session.getAttribute(...)

Линк на ответ

READ ALSO
Объединение двух коллекций в одну с двумя полями

Объединение двух коллекций в одну с двумя полями

Как объединить две коллекции Elements actors, roles в одну List<Actors> (у Actors есть два таких же поля) более элегантно, чем for() с итератором?

272
Как правильно установить LayoutParams?

Как правильно установить LayoutParams?

Я использую в своем проекте эту библиотеку

227
Сборка APK файла из исходников

Сборка APK файла из исходников

Можно ли из исходников Android Studio проекта, собрать APK файл( вне студии ) через терминал(Linux)?

330
Spring: как загрузить таблицу из DB в память?

Spring: как загрузить таблицу из DB в память?

Здравствуйте, у меня есть небольшая таблица, которую я хочу загрузить в память в виде List<Country>, чтобы не дергать БДНо

317