Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter
    nagyúr

    Sziasztok!
    Akarok csinálni egy bejelentkezést jsp+servletel, de ugyan azt a hibát kapom akármit csinálok.
    Servlet doPost:

    PrintWriter out = response.getWriter();

    String username = request.getParameter("user");
    String password = request.getParameter("pwd");
    UserSQL dao = new UserSQL();

    int result = dao.loginUser(username, password);
    if (result == 1) {
    RequestDispatcher rd = getServletContext().getRequestDispatcher("index.jsp");
    out.println("<font color=red>Adatbázis hiba.</font>");
    }
    if (result == 2) {
    RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
    // RequestDispatcher rd = getServletContext().getRequestDispatcher("error.jsp");
    out.println("<font color=red>Rossz felhasználónév/jelszó.</font>");
    }
    HttpSession s = request.getSession();
    s.setAttribute("username", username);
    s.setAttribute("login", true);

    response.sendRedirect("success.jsp");

    A userSQL class aminek át kellene vennie a 2 stringet és vissza adni egy számot, de szerintem nem kapja meg az értékeket:

    public int loginUser(String username, String password) {
    connect();
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
    try {

    stmt = con.createStatement();
    rs = stmt.executeQuery(sql_comm);
    if (rs.next() == false) {
    return 2;
    } else {
    return 0;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    return 1;
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    Hibaüzenet:
    java.lang.NullPointerException
    model.UserSQL.loginUser(UserSQL.java:47)
    controller.login.doPost(login.java:53)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Tudna valaki segíteni, ötletet adni mi baja lehet? Van sok megoldás a neten, de én ezzel akarom csinálni és érdekelne mit rontottam el. NullPointerException ez ha jól tudom azt jelenti, hogy null értékű objektummal tér vissza, de javítsatok ki ha tévedek.
    Előre is köszi a segítséget.

    Azt vágod, hogy a felhasználótól kapott adatot egy az egyben dobálod bele a query-be, escape-elés vagy sokkal inkább prepared statement (rendkívül meglepő módon erre való a PreparedStatement és a Connection osztály prepareStatement metódusa) használata helyett, ezzel fasza kis lehetőséget adva az SQL Injectionre?

    http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

    Meg amúgy a SELECT * használata nagyon nem javasolt sehol. Sorold fel szépen a mezőket, amikre szükséged van.

  • Aethelstone
    addikt

    Sziasztok!
    Akarok csinálni egy bejelentkezést jsp+servletel, de ugyan azt a hibát kapom akármit csinálok.
    Servlet doPost:

    PrintWriter out = response.getWriter();

    String username = request.getParameter("user");
    String password = request.getParameter("pwd");
    UserSQL dao = new UserSQL();

    int result = dao.loginUser(username, password);
    if (result == 1) {
    RequestDispatcher rd = getServletContext().getRequestDispatcher("index.jsp");
    out.println("<font color=red>Adatbázis hiba.</font>");
    }
    if (result == 2) {
    RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
    // RequestDispatcher rd = getServletContext().getRequestDispatcher("error.jsp");
    out.println("<font color=red>Rossz felhasználónév/jelszó.</font>");
    }
    HttpSession s = request.getSession();
    s.setAttribute("username", username);
    s.setAttribute("login", true);

    response.sendRedirect("success.jsp");

    A userSQL class aminek át kellene vennie a 2 stringet és vissza adni egy számot, de szerintem nem kapja meg az értékeket:

    public int loginUser(String username, String password) {
    connect();
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
    try {

    stmt = con.createStatement();
    rs = stmt.executeQuery(sql_comm);
    if (rs.next() == false) {
    return 2;
    } else {
    return 0;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    return 1;
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    Hibaüzenet:
    java.lang.NullPointerException
    model.UserSQL.loginUser(UserSQL.java:47)
    controller.login.doPost(login.java:53)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Tudna valaki segíteni, ötletet adni mi baja lehet? Van sok megoldás a neten, de én ezzel akarom csinálni és érdekelne mit rontottam el. NullPointerException ez ha jól tudom azt jelenti, hogy null értékű objektummal tér vissza, de javítsatok ki ha tévedek.
    Előre is köszi a segítséget.

    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
    try {

    stmt = con.createStatement();

    Mintha nem lenne inicializálva....gondolom, hogy a connect(); tenné meg, de akkor azt mondjuk a deklaráció után kellene írni...vagy hogyisvanez?

  • Lortech
    addikt

    Sziasztok!
    Akarok csinálni egy bejelentkezést jsp+servletel, de ugyan azt a hibát kapom akármit csinálok.
    Servlet doPost:

    PrintWriter out = response.getWriter();

    String username = request.getParameter("user");
    String password = request.getParameter("pwd");
    UserSQL dao = new UserSQL();

    int result = dao.loginUser(username, password);
    if (result == 1) {
    RequestDispatcher rd = getServletContext().getRequestDispatcher("index.jsp");
    out.println("<font color=red>Adatbázis hiba.</font>");
    }
    if (result == 2) {
    RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
    // RequestDispatcher rd = getServletContext().getRequestDispatcher("error.jsp");
    out.println("<font color=red>Rossz felhasználónév/jelszó.</font>");
    }
    HttpSession s = request.getSession();
    s.setAttribute("username", username);
    s.setAttribute("login", true);

    response.sendRedirect("success.jsp");

    A userSQL class aminek át kellene vennie a 2 stringet és vissza adni egy számot, de szerintem nem kapja meg az értékeket:

    public int loginUser(String username, String password) {
    connect();
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
    try {

    stmt = con.createStatement();
    rs = stmt.executeQuery(sql_comm);
    if (rs.next() == false) {
    return 2;
    } else {
    return 0;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    return 1;
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    Hibaüzenet:
    java.lang.NullPointerException
    model.UserSQL.loginUser(UserSQL.java:47)
    controller.login.doPost(login.java:53)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Tudna valaki segíteni, ötletet adni mi baja lehet? Van sok megoldás a neten, de én ezzel akarom csinálni és érdekelne mit rontottam el. NullPointerException ez ha jól tudom azt jelenti, hogy null értékű objektummal tér vissza, de javítsatok ki ha tévedek.
    Előre is köszi a segítséget.

    NullPointerException-t alapvetően akkor kapsz, ha olyan objektum mezőjére / metódusára hivatkozol, amely null.

    A konkrét esetben a lényeg:
    ...
    Connection con = null;
    ...
    stmt = con.createStatement();

    Nem állítod be a con változódat, null marad, de hívod a metódusát.

Új hozzászólás Aktív témák