Как перенаправить страницу jsp после истечения срока действия сеанса?

#java #jsp #session

#java #jsp #сеанс

Вопрос:

 <%
   if(session == null) {
       System.out.println("Expire");
       response.sendRedirect("/login.jsp");
    }else{
       System.out.println("Not Expire");
    }
 %>

 <%
   HttpSession sess = request.getSession(false);
   String email = sess.getAttribute("email").toString();
   Connection conn = Database.getConnection();
   Statement st = conn.createStatement();
   String sql = "select * from login where email = '"   email   "' ";
   ResultSet rs = st.executeQuery(sql);
 %>
  

Я попытался перенаправить страницу login.jsp, когда истек срок действия сеанса.
Но я получаю сообщение об ошибке в «String email = sesss.getAttribute(«email»).toString(); «.

Итак, кто-нибудь, пожалуйста, помогите мне решить эту ошибку.

По сути, я хочу перенаправить на страницу login.jsp, когда истечет срок действия сеанса.

Комментарии:

1. В чем ошибка?

2. Вам нужно либо 1) поместить всю партию в if или 2) return . Или 3) никогда, никогда больше не использовать скриплеты — они были очень плохой практикой уже десять лет; никто не должен их использовать.

3. @BoristheSpider Я с вами в № 3, особенно проблема подключения к базе данных заставляет меня содрогаться.

4. Я изменил некоторый код. если (session.getAttribute(«email») == null) { System.out.println(«Истекает»); response.sendRedirect(«login.jsp»); }else{ System.out.println(«Не истекает»); } Я получу «Expire»текст, но по-прежнему не перенаправляется на страницу «login.jsp». И столкнулся с той же ошибкой второй партии.

Ответ №1:

Прежде всего. Вы смешиваете код JSP и Java. Вы должны разделить его. Сохраняйте код Java в контроллерах.

Вы можете использовать:

 if(request.getSession(false) == null) {
    response.sendRedirect("/login.jsp");
}
  

«… Если create равно false и запрос не имеет допустимого HttpSession , этот метод возвращает null».

Ответ №2:

Например, создать фильтр аутентификации

 @WebServlet(
    name = "AuthenticationFilter",
    description = "Authentication Filter",
    urlPatterns = "/AuthenticationFilter"
  

)
@WebFilter(«* .jsp»)
открытый класс AuthenticationFilter реализует Filter {

 private ServletContext context;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    this.context = filterConfig.getServletContext();
    this.context.log("AuthenticationFilter initialized");
}

@Override
public void destroy() {
    //close any resources here
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    String uri = req.getRequestURI();
    this.context.log("Requested Resource::"   uri);

    HttpSession session = req.getSession(false);
    Object user_o = req.getSession().getAttribute("username");
    this.context.log("Authentication Filter, user_name::"   user_o);

    if (user_o == null amp;amp; !(uri.endsWith("index.jsp") || uri.endsWith("LoginUser"))) {
        this.context.log("None authenticatied request, session:: "   session);
        res.sendRedirect("index.jsp");

    } else {
        this.context.log("Authenticatied request, session:: "   session);
        chain.doFilter(request, response);
    }

}
  

Ответ №3:

Я попробовал это, и у меня все работает нормально.

 <%
    if(session.getAttribute("email") == null) {
       response.sendRedirect("login.jsp");
       return ;
    }
%>
  

Я просто помещаю оператор return, и он перенаправит на «login.jsp», когда истечет срок действия сеанса.