Перенаправить страницу в соответствии с ролью пользователя после проверки пользователя - PullRequest
0 голосов
/ 29 апреля 2019

Я пытался перенаправить пользователя, который вошел в систему, на соответствующую страницу после проверки его адреса электронной почты и пароля.Но я не уверен в логике этого кодирования, и когда я пытаюсь это сделать, он просто отвечает оператором else.Я пробовал проверить адрес электронной почты и пароль, и он отлично работает и перенаправляет на нужную страницу, но когда я добавляю условие типа пользователя, оно не работает

Я пытался включить вложенные операторы if, но я неуверен в своей логике, он всегда выполняет оператор else.

loginControllerServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        String email=request.getParameter("email");
        String password=request.getParameter("pwrd");

        User theUser=loginDbUtil.gettype(email);

        if(loginDbUtil.check(email, password))
        {       
            String p="pharmacist";

            if(theUser.getType()==p)
            {
//              HttpSession session=request.getSession();
//                  session.setAttribute("email", email);
                    response.sendRedirect("medicine.jsp");
            }
            else
            {
                response.sendRedirect("index.jsp");
            }




    }else
    {
        response.sendRedirect("index.jsp");
    }

    }
}

loginDbUtil.java

public boolean check(String email,String password)
    {
        Connection myConn=null;
        PreparedStatement myStmt=null;
        ResultSet rs=null;

        try
        {
            //get db connection
            myConn=dataSource.getConnection();


            //sql statemtn
            String sql="select email,pass from usertab where email=? and pass=? ";


            myStmt=myConn.prepareStatement(sql);

            //set the param values for user
            myStmt.setString(1, email);
            myStmt.setString(2, password);

            rs=myStmt.executeQuery();

            if(rs.next())
            {
                return true;  
            }



        }catch(Exception e)
        {
            e.printStackTrace();
        }



        return false;
    }




    public User gettype(String email) {

        User type=null;

        Connection myConn=null;
        PreparedStatement myStmt=null;
        ResultSet rs=null;

        try
        {
            //get db connection
            myConn=dataSource.getConnection();


            //sql statemtn
            String sql="select type from usertab where email=?  ";


            myStmt=myConn.prepareStatement(sql);

            //set the param values for user
            myStmt.setString(1, email);

            rs=myStmt.executeQuery();

            if(rs.next())
            {
                String t=rs.getString("type");



            type =new User(t);

            }



        }catch(Exception e)
        {
            e.printStackTrace();
        }

        return type;

    }

}

То, что я хочу, это после электронной почты ипроверяется пароль, затем проверяется тип данных пользователей и перенаправляется на правильную страницу

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

В вашем loginControllerServlet.java измените это на

if(theUser.getType()==p)

на это

if(theUser.getType().equals(p))
0 голосов
/ 29 апреля 2019

В соответствии с вашей логикой, я думаю, прежде всего, вы должны поместить тип атрибута как int, будет меньше шансов иметь такой тип, как Pharmacist и pharmacist.

Затемпроверка с базой данных корректна, но я не думаю, что то же самое в отношении метода getType, вот что я бы посоветовал вам:

1-й: Создайте одного пользователя bean (объекта), как вы, похоже, сделали, иположить геттеры и сеттеры, и поместить конструктор со всеми атрибутами в качестве параметров.пример:

class User {

   private int id;
   private String mail;
   private String password;
   private int type;

   public User(){

   }

   public User(int id, String mail, String password, int type){
      this.id = id;
      this.mail = mail;
      this.password = password;
      this.type = type;
   }

   // Getters and setters


}

Затем вы проверяете, что почта будет возвращать непосредственно объект пользователя, поэтому у вас должно быть

class userDB {

   public User login(String mail, String password){

      User user = new User();
      String query = "select * from user where mail = ? and password = ?";

      try{

         PreparedStatement prep = conn.prepareStatement(query);

         prep.setString(1,mail);
         prep.setString(2,password);

         ResultSet res = res.executeQuery();

         if(res.first){

            user = new User(res.getInt("id"),res.getString("mail"),res.getString("password"),res.getInt("type"));
            return user;
         }else{

            return null;

         }

      }catch (Exception e){

        e.printStackTrace();
        return null;

      }

   }

}

, а затем в вашем сервлете вы можете прямо:

class Login extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse respons) throws ServletException, IOException {         

         this.getServletContext().getRequestDispatcher(your_jsp_relative_path).forward(request, respons);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse respons) throws ServletException, IOException {       

        String mail = (String) request.getParameter("mail');
        String password = (String) request.getParameter("mail');

        User user = new UserDB().login(mail, password);

        if(user != null){

           int type = user.getType();

           switch(type){

              case 0 :
                   respons.sendRedirect("type_0_page");
              break;
              case 1 :
                   respons.sendRedirect("type_1_page");
              break;
              case 2 :
                   respons.sendRedirect("type_2_page");
              break;
              default :
                   repons.sendRedirect("/error500.jsp");
              break;
           }

        }else{

            this.getServletContext().getRequestDispatcher(your_jsp_relative_path).forward(request, respons);

        }


    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...