Hirdetés

Keresés

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

  • estro
    csendes tag

    Sziasztok, egy kérdésem lenne hogy szerintetek melyik lenne a jobb megoldás.

    A probléma hogy a JPA a OneToMany esetén duplikálva adja vissza a child entityket.

    Itt egy stackoverflow kérdés róla:
    https://stackoverflow.com/questions/1995080/hibernate-criteria-returns-children-multiple-times-with-fetchtype-eager

    Nekem fontos lenne eager lekérdezés és hogy sorrend tartó legyen az adat.
    1. JPA interfacet használok, szóval csak ezért érdemes lenne egy DAO-t létrehozni és hibernateval Criteria-t írni erre az egy lekérdezésre?
    2. vagy szűrjem ki a duplikációkat a service layerben?
    3. esetleg lehet erre írni valami queryt a JPA @Query annotációval?

    amúgy érthető mit szeretnék kérdezni, vagy még senki nem találkozott ilyennel? :D

  • estro
    csendes tag

    Sziasztok, egy kérdésem lenne hogy szerintetek melyik lenne a jobb megoldás.

    A probléma hogy a JPA a OneToMany esetén duplikálva adja vissza a child entityket.

    Itt egy stackoverflow kérdés róla:
    https://stackoverflow.com/questions/1995080/hibernate-criteria-returns-children-multiple-times-with-fetchtype-eager

    Nekem fontos lenne eager lekérdezés és hogy sorrend tartó legyen az adat.
    1. JPA interfacet használok, szóval csak ezért érdemes lenne egy DAO-t létrehozni és hibernateval Criteria-t írni erre az egy lekérdezésre?
    2. vagy szűrjem ki a duplikációkat a service layerben?
    3. esetleg lehet erre írni valami queryt a JPA @Query annotációval?

  • estro
    csendes tag

    Hát jah. Ennek ellenére pl. a Sonar a &-et simán kifügyöli, hogy Te biztos &&-t akartál használi :) Egyébként én aránylag gyakran használom...ahogy írtam is, validálásra, amikor is azt akarom, hogy lefusson mindegyik, mert nem csak le kell futnia, hanem a lefutáskor mondjuk false esetén be is kell pirosozni vmit...nyilván ezt lehet &&-el is, de ez már ízlés dolga.

    Hát az elég átláthatatlan kód, nem? Egy feltétel vizsgálatnál szerintem legtöbben nem számítanánk állapot változásra. Ha jól emlékszem valamelyik könyvben volt is írva, hogy nem ajánlott használni.

  • estro
    csendes tag

    Csáó! Spring securityt próbálgatom, de nem boldogulok ezzel a csrf -el.
    Beállítom egy filterrel a válasz headerbe a tokent:
    CsrfToken token = (CsrfToken) request.getAttribute("_csrf");

    if (token != null) {
    response.setHeader("X-CSRF-HEADER", token.getHeaderName());
    response.setHeader("X-CSRF-PARAM", token.getParameterName());
    response.setHeader("X-CSRF-TOKEN", token.getToken());
    }

    filterChain.doFilter(request, response);

    Van több HTML oldalam, amit a sevlet például így ad vissza:
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String loginPage() {
    System.out.println("login");
    return "login";
    }

    jQuery:

    jQuery(document).ready(function ($) {
    var csrfToken;
    $.ajax({
    type: 'GET',
    url: '/springSecurityApp/login'

    }).done(function (data, textStatus, jqXHR) {
    csrfToken = jqXHR.getResponseHeader('X-CSRF-TOKEN');
    });
    });

    Csak úgy tudom kiolvasni a tokent, ha jQueryvel kérem le az oldalt. Ez azért nem jó mert 2x tölti le a kliens a login.html-t: amikor beírom az URL-t, és ezután a jquery lekéri magának, hogy kiolvassa a response headert.
    Erre van valami egyszerűbb módszer? Vagy tudtok valami tutorialt ezzel kapcsolatban?

  • estro
    csendes tag

    köszi

    Én egy olyat keresnék, ahol saját magam bármikor végigmehetek az oktató kurzusokon, példákon keresztül.
    Ha valaki ismer ilyet és jónak találja, akkor légyszíves oszd meg.

    köszi

  • estro
    csendes tag

    persze, mert ha tovább bonyolítanám, akkor kiderülne, hogy egyszer (pl. int) érték szerint átadva rögtön ott van az adat és lehet vele számítást végezni, máskor meg (pl. Integer) érték szerint átadva nincs ott az adat, hogy számítást végezz vele, hanem még kell egy dereferencia is.

    ez sok profi szakembert megkavarna :)

    Egy kicsit tényleg zavaró, mert az int az integernek a rövidítése, viszont a javaban az Integer-el egy hivatkozó változót hozunk létre, ami egy objektumra mutat (int objektum vagy mi :D), az int pedig egy primitív változó. De mondjuk aki Javat tanul az eljut az tömbökhöz, ott meg általában a tutorialokban leírják, hogy az egy objektum ami objektumokat tárol, ahhoz meg tartozik egy autoboxing folyamat, ha primitíveket akarunk tárolni.

  • estro
    csendes tag

    Minden esetben az van, a referencia egy primitiv tipus mindegy...

    "A változóknak két fajtája van: primitívek és hivatkozások.
    A primitív változók olyan értékekkel vannak tele, amelyek a változó tényleges értékét ábrázolják.
    Az objektum típusú változó (hivatkozó változó), azonban az objektum elérésének módját tárolják."

    Agyhullám: Java könyvben ez szerepel.
    Én nem értem, hogy lehet referencia egy primitív, habár még nem vagyok gyakorlott a Javaban :/.
    A referencia változó az egy objektumra hivatkozik aminek vagy van beállított példány változói vagy nincs, ha nincs akkor csak egy sima tulajdonság nélküli objektum, viszont a primitív változó az int, float, double stb... és használat előtt bekell állítani valamilyen értékre.
    Jelenlegi ismereteim alapján egyetlen közös tulajdonságuk van, hogy biteket ábrázolnak. De ha bonyolult az okkifejtése akkor tényleg hagyjuk :)

  • estro
    csendes tag

    Basszus ilyen nyakatekert példákon veszem észre, hogy mennyire sokat kell ahhoz tanulni, hogy készség szintjén tudja ezeket a dolgokat valaki. Ha jobban belegondolok a kollégám is hónapok óta képzi a juniorokat, és most értek el odáig, hogy servlet...

    Ha nem tolakodás, akkor megkérdezhetem hol képzi ilyen alaposan a juniorokat? :D Csak mert nyáron jó lenne gyakorlat, ahol ilyen kis képzést is tartanak java webfejlesztésből :)

  • estro
    csendes tag

    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.

    Az SQL injection tudtam, hogy veszélyes az adatbázisomra, de még nem néztem utána mit lehet ellene tenni, de akkor most már tudom :D. A SELECT * tényleg eléggé rontja a teljesítményt most, hogy belegondolok (főleg ha majd joint is használok), majd kijavítom azt is, mert már van vagy 5 mező mivel regisztrációt is csináltam hozzá. Köszi a tippeket!

  • estro
    csendes tag

    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.

    Köszi szépen a válaszokat, jól elnéztem. Most már működik. Még lekellett cserélnem ’ ezt erre ' hogy értelmezze az adatbázis :D

  • estro
    csendes tag

    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.

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

Hirdetés