java - 加载jsp之前需要验证

标签 java servlets jspinclude

我有一个场景,我想在加载welcome.jsp 页面之前进行一些验证。实际上,验证就像我有一个用户 ID(使用 request.getRemoteUser),我想在我的数据库中检查它是否已经存在。如果是,那么我想将其重定向到另一个页面,例如login.jsp。如果没有,它将重定向到我的welcome.jsp。我已经声明了一个 servlet (CheckUser.java),我在其中从 doGet 调用 doPost,并且还在我的welcome.jsp 中包含了相同的 servlet,以便在加载它之前 doGet 将调用。

**CheckUser.java**

package DBResource;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CheckUser extends DBConnection {
        String page="ListProjects.jsp";
        public Connection conn= null;
        // This Happens Once and is Reused
@Override
public void init(ServletConfig config) throws ServletException
   {
       super.init(config);                       
   }

public boolean SearchUser(String Usrid)  throws SQLException{
   try{

        // Establishing connection using data source
       conn=ds.getConnection();

       PreparedStatement stmt=conn.prepareStatement("select * from OSS_USER where USER_EMAIL='"+Usrid+"'");

                ResultSet rs = stmt.executeQuery();

                boolean hasResult = rs.next();
                return hasResult;

   }

   catch (Exception e){
        e.printStackTrace();
        return false;
    }
   finally {
        if (conn != null) conn.close();
    }

}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("on CheckUser doGet...........");
    doPost(request,response);

}


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


            System.out.println("on CheckUser doPost..........");
            //String Usrid= request.getRemoteUser();
            String Usrid= "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e2838081a29690cc818d8f" rel="noreferrer noopener nofollow">[email protected]</a>";

            contextPath = request.getContextPath();
            page = "/ListProjects.jsp";


    try {
        boolean susr =  SearchUser(Usrid);
        if (susr==true)
        {
            response.sendRedirect(contextPath + "/ListProjects.jsp");   

        } 
    } catch (SQLException ex) {
        Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex);
    }
    finally {
        if (conn != null) try {
            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


}

/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

Welcome.jsp

<body>

    <jsp:include page="/CheckUser" flush="true" />          

最佳答案

使用 beans 和 scriptlet 解决了此问题。在 Jsp 页面中,我导入了 java 类(StoreUsrDetails)并声明了一个 jsp 使用 bean(storeusr)。

在jsp页面中

<%@page import="com.thomsonreuters.alpaca.StoreUsrDetails" %>
<jsp:useBean id="storeusr" class="com.thomsonreuters.alpaca.StoreUsrDetails" scope="request" />

使用bean,我调用java方法(validateUser)中的一个方法,该方法返回用户详细信息是否存在于数据库中。 之后我在 jsp 主体的开头编写了一段脚本代码。并根据 validateUser 方法的返回值,我将它们重定向到另一个页面。

Jsp 正文

<body>
    <% 

           if(storeusr.validateUser(request.getRemoteUser()))  
          response.sendRedirect("ListProjects.jsp");   


    %> 

关于java - 加载jsp之前需要验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345979/

相关文章:

java - 如何将 HttpServletRequest 的 ParameterMap 转换为 Java 中的 bean

javascript - 我应该如何在我的 .js 和 css 位于不同位置的 jsp 中定义路径

java - hibernate 搜索 : DateBridge is throwing npe for null fields

java - 将 Date 对象转换为日历对象

java - 相机预览不起作用 : Error while loading camera

java - Web 应用程序之间的 Servlet 通信

java - Jetty servlet url 和端口

java - 无法在 spring 数据 rest 中启动 bean 'documentationPluginsBootstrapper'

jsp - 在 JSP 页面中动态导入文件

java - 包含来自动态属性值的文件