【问题标题】:How to redirect jsp page after session expired?会话过期后如何重定向jsp页面?
【发布时间】:2016-09-30 08:30:03
【问题描述】:
<%
   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) 将整个批次放入 if 或 2) return。或者 3) 永远,永远,再也不使用 scriptlet - 十年来它们一直是非常糟糕的做法;没有人应该使用它们。
  • @BoristheSpider 我支持你。 3,尤其是数据库连接这件事让我不寒而栗。
  • 我更改了一些代码。 if(session.getAttribute("email") == null) { System.out.println("Expire"); response.sendRedirect("login.jsp"); }else{ System.out.println("未过期");我会得到“过期”文本,但仍然没有重定向到“login.jsp”页面。并面临第二批相同的错误。

标签: java jsp session


【解决方案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 实现过滤器 {

    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 && !(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”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 2017-10-28
        • 1970-01-01
        • 2021-08-25
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多