2014-12-23 2 views
-1

У меня возникла проблема с проверкой подлинности электронной почты и пароля, независимо от того, принадлежит она зарегистрированному члену или нет. Я использую NetBeans и создал базу данных с таблицей members. Я создал пул соединений и заполнил таблицу моих участников.Валидация для пользователя, электронной почты и пароля не работает

После внедрения кода, устранения ошибок и просмотра нескольких видеороликов об учебнике NetBeans я до сих пор не могу понять, где я его не хватает. Я застрял там с 4-х дней, и теперь я потерял его. Надеюсь, вы, ребята, можете мне помочь, спасибо заранее.

Это моя таблица пользователей данные:

# | id |  email  | password | name 
------------------------------------------------ 
1 | 1 | [email protected] | what | Number 1 
2 | 2 | [email protected] | fire | Number 2 

Это код для моего LoginServlet:

@WebServlet("/login") 
public class LoginServlet extends HttpServlet{ 
    @Resource(name = "jdbc/jed") 
    private DataSource dsMembers; 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String strName = request.getParameter("memberName"); 
     String strPassword = request.getParameter("memberPassword"); 
     String strEmail = request.getParameter("memberEmail"); 
     Connection conn = null; 
     Statement stmt = null; 
     ResultSet rs = null; 

     try { 
      conn = dsMembers.getConnection(); 
      String sql = "SELECT * FROM members"; 
      stmt = conn.createStatement(); 
      rs = stmt.executeQuery(sql); 

      while (rs.next()){ 
       if((isValidEmail(strEmail))&& (strEmail.equals(rs.getString("email")))&& (strPassword.equals(rs.getString("password")))&&(strName.equals(rs.getString("name")))){ 
        System.out.println("Success"); 

        HttpSession session = request.getSession(); 
        session.setAttribute("name", strName); 
        session.setAttribute("email", strEmail); 
        response.sendRedirect(this.getServletContext().getContextPath() + "/account.jsp"); 
       } 
       else { 
        request.getSession().invalidate(); 
        response.sendRedirect(this.getServletContext().getContextPath()); 
       } 
      } 
     } catch (SQLException ex) { 
      System.out.println("SQLException: " + ex.getMessage()); 
     } 
    } 

    private boolean isValidEmail(String strEmail){ 
     if(strEmail.matches("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$")) 
      return true; 
     return false; 
    } 
} 

Это журнал GlassFish сервер я получаю:

WEB0671: Загрузка приложения [Проект] в [/ Project]
Информация: Проект был успешно развернут за 286 миллисекунд.
WEB0671: Загрузка приложения [Проект] в [/ Project]
Информация: Проект был успешно развернут за 247 миллисекунд.
информация: Invalid пользователя, пароль или адрес электронной почты
информация: Invalid пользователя, пароль или адрес электронной почты
Предупреждение: StandardWrapperValve [org.jedlibrary.lola.loan.ValidationServlet]: PWC1406: Servlet.service() для сервлета org.jedlibrary. lola.loan.ValidationServlet бросили исключение java.lang.IllegalStateException на org.apache.catalina.connector.ResponseFacade.sendRedirect (ResponseFacade.java:524)
на org.jedlibrary.lola.loan.ValidationServlet.doPost (ValidationServlet. java: 46) at javax.servlet.http.HttpServlet.service (HttpServlet.java:688) at javax.servlet.http.HttpServlet.service (HttpServlet.java:770) at org.apach e.catalina.core.StandardWrapper.service (StandardWrapper.java:1550)
в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:281)
в org.apache.catalina.core.StandardContextValve. вызывать (StandardContextValve.java:175)
в org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:655)
в org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:595)
на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:161)
на org.apache.catalina.connector.CoyoteAdapter.doService (CoyoteAdapter.java:331)
на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:231)
в com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call (ContainerMapper.java:317)
на ком. sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:860) at com.sun.grizzly.http .ProcessorTask.doProcess (ProcessorTask.java:757) на com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.Java: 1 056)
в com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:229)
в com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java:137)
в com.sun .grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:104)
на com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:90)
в com.sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java : 79)
at com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call (Выбор KeyContextTask.java:59)
в com.sun.grizzly.ContextTask.run (ContextTask.java:71) в com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:532)
в com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:513)
в java.lang.Thread.run (Thread.java:745)

+0

[Ваша проблема - исключение IllegalStateException] (https://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/connector/ResponseFacade.html#sendRedirect%28java.lang.String%29). – Tom

+0

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

ответ

0

конечно, это не работает, вы проверяете, является ли вход по электронной почте email, пароль password и имя name.

Вы должны проверить, не являются ли константы ResultSet. Так, например, вместо

strEmail.equals("email") 

вы должны написать

strEmail.equals(rs.getString("email")) 

Edit:

Вы пропустили что-то еще: вы не проверяют весь ResultSet. Первый результат не соответствует вашим предоставленным данным, поэтому вы немедленно аннулируете сеанс. Вы должны только аннулировать его, если ни один из элементов не соответствует.

Это позволит решить вашу проблему:

while (rs.next()) { 
    if (isValidEmail(strEmail) && strEmail.equals(rs.getString("email")) && strPassword.equals(rs.getString("password")) && strName.equals(rs.getString("name"))) { 
     System.out.println("Success"); 
     HttpSession session = request.getSession(); 
     session.setAttribute("name", strName); 
     session.setAttribute("email", strEmail); 
     response.sendRedirect(this.getServletContext().getContextPath() + "/account.jsp"); 
     return; 
    } 
} 
request.getSession().invalidate(); 
response.sendRedirect(this.getServletContext().getContextPath()); 

Моя Конечная нота: вы должны никогда осуществить вход таким образом (даже для домашнего задания), выбирая полную таблицу, только за один рекорд просто пустая трата ресурсов.

Вы должны использовать PreparedStatement с утверждением, как select * from members where name = ?, и проверить, есть ли результат, и пароль и адрес электронной почты являются подходящими (я предположил, что это имя уникально в базе данных).

+0

Вау, спасибо за указание, meskobalazs, но что я должен изменить или удалить, нужна помощь, если вы не возражаете. – user3127380

+0

Спасибо meskobalazs, я просто изменил его, но все равно получаю тот же журнал ошибок. – user3127380

+0

Да, журнал из тега GlassFish Server – user3127380

Смежные вопросы