UltraB Δημοσιεύτηκε Μάϊος 23, 2016 #1 Κοινοποίηση Δημοσιεύτηκε Μάϊος 23, 2016 Καλησπέρα σε όλους, έχω διάφορες ερωτήσεις σχετικά με τη Java που χρειάζομαι βοήθεια. Θα αρχίσω σταδιακά για αρχή για να μην τα βάλω όλα μαζί και χάσουμε τη μπάλα. Έχω μια βάση δεδομένων στην οποία έχω ένα table users. Αυτό εμπεριέχει όλους τους χρήστες όπως καταλαβαίνεται. Έπειτα έχω ένα Java πρόγραμμα και θέλω να κάνω loggin και για αρχή να ελέγχει τα στοιχεία της βάσης. Ως εδώ καλά. Έστω ότι μου δίνει σωστά στοιχεία, πως μπορώ εγώ και με ποιο τρόπο να τα κρατήσω κάπου ώστε να τα χρησιμοποιήσω στη συνέχεια; Να δω ότι όντως έχει κάνει είσοδο, να φτιάξω ένα logout, να τα περάσω σε άλλο πεδία κλπ. Ευχαριστώ! private void jLogginActionPerformed(java.awt.event.ActionEvent evt) { Connection connection; PreparedStatement ps; try { connection = DriverManager.getConnection("jdbc:mysql://localhost/eshop", "root", ""); ps = connection.prepareStatement("SELECT `Username`, `Password` FROM `customers` WHERE `Username` = ? AND `Password` = ?"); ps.setString(1, jTextFieldUsername.getText()); ps.setString(2, String.valueOf(jPasswordField.getPassword())); ResultSet result = ps.executeQuery(); if(result.next()){ JOptionPane.showMessageDialog(jPanel1, "Login Successesfully"); } else{ JOptionPane.showMessageDialog(jPanel1,"Invalide Username Or Password", "ERROR", JOptionPane.ERROR_MESSAGE); } } catch (SQLException ex) { Logger.getLogger(Java_Form_Login.class.getName()).log(Level.SEVERE, null, ex); } } PS: Γνωρίζω ελάχιστα περί Java, οπότε με το λάου - λάου Link to comment Share on other sites More sharing options...
Wizard! Μάϊος 23, 2016 #2 Κοινοποίηση Μάϊος 23, 2016 1. ΠΟΤΕ δεν κρατάμε κάπου το password του χρήστη. Χρησιμοποιείς κάποιο authentication token για να επαληθεύεις τον χρήστη αν θέλεις να βάλεις "Remember me". 2. Αν θέλεις προσωρινό login, δηλαδή μέχρι να κλείσει τον browser, τότε αποθηκεύεις τα στοιχεία που χρειάζεσαι σε κάποιο Session. 3. Αν θέλεις δυνατότητα αυτόματου login ("Remember me"), τότε τα βάζεις σε Cookie. ΕΙΔΙΚΑ αν χρησιμοποιήσεις cookie, ποτέ μα ποτέ δεν αποθηκεύεις εκεί password γιατί γράφεται χύμα σε text αρχείο στο δίσκο του. Link to comment Share on other sites More sharing options...
UltraB Μάϊος 23, 2016 Author #3 Κοινοποίηση Μάϊος 23, 2016 πριν 2 ώρες, το μέλος Wizard! έγραψε: 1. ΠΟΤΕ δεν κρατάμε κάπου το password του χρήστη. Χρησιμοποιείς κάποιο authentication token για να επαληθεύεις τον χρήστη αν θέλεις να βάλεις "Remember me". 2. Αν θέλεις προσωρινό login, δηλαδή μέχρι να κλείσει τον browser, τότε αποθηκεύεις τα στοιχεία που χρειάζεσαι σε κάποιο Session. 3. Αν θέλεις δυνατότητα αυτόματου login ("Remember me"), τότε τα βάζεις σε Cookie. ΕΙΔΙΚΑ αν χρησιμοποιήσεις cookie, ποτέ μα ποτέ δεν αποθηκεύεις εκεί password γιατί γράφεται χύμα σε text αρχείο στο δίσκο του. Για Java μιλάμε εεε; Γιατί έτσι όπως το διάβασα τα πέρασα για PHP / SQL Προφανώς με ενδιαφέρει η ασφάλεια, γι αυτό και ο τόσο απλοϊκός παραπάνω τρόπος. Link to comment Share on other sites More sharing options...
Wizard! Μάϊος 23, 2016 #4 Κοινοποίηση Μάϊος 23, 2016 Όχι, δε μιλάω για Java, μιλάω για γενικές αρχές web software. Δεν έχω ιδέα από Java, αλλά αυτά παίζουν σε όελς τις γλώσσες Link to comment Share on other sites More sharing options...
UltraB Μάϊος 23, 2016 Author #5 Κοινοποίηση Μάϊος 23, 2016 πριν 33 λεπτά, το μέλος Wizard! έγραψε: Όχι, δε μιλάω για Java, μιλάω για γενικές αρχές web software. Δεν έχω ιδέα από Java, αλλά αυτά παίζουν σε όελς τις γλώσσες Ναι, τα ξέρω αυτά. Σε Java πως γίνεται η υλοποίηση είναι το θέμα. Link to comment Share on other sites More sharing options...
Wizard! Μάϊος 23, 2016 #6 Κοινοποίηση Μάϊος 23, 2016 Για τις εντολές, θα τις βρεις στο επίσημο site. Για τη μεθοδολογία τώρα, ουσιαστικά υπάρχουν δύο τρόποι: 1. Έχεις έναν πίνακα στη βάση σου με τους Online Users. Όταν ο χρήστης κάνει login, γράφεις τα στοιχεία που θέλεις, έτσι δεν έχει κανείς πρόσβαση, και του δίνεις ένα ID, OXI αριθμητικό, καλύτερα τυχαίο ή GUID, με το οποίο επικοινωνείς. Αυτό το γράφεις στο Session ή σε Cookie και το ζητάς σε κάθε κλήση. Ανάλογα με την υλοποίηση, καθαρίζεις και τον πίνακα όποτε χρειαστεί. 2. Φτιάχνεις έναν δικό σου αλγόριθμο όπου βάζεις τα στοιχεία του χρήστη που χρειάζεσαι σε ένα string, προσθέτεις μπροστά και πίσω 10-20-50 χαρακτήρες και μετά το κρυπτογραφείς με κάποιο reversible αλγόριθμο (πχ SHA1/2/256/512). Αντίστοιχα στην εκάστοτε κλήση, το ζητάς από το χρήστη, το αποκωδικοποιείς και έχεις ότι στοιχεία χρειάζεσαι. Καλό θα είναι πάλι να μην αποθηκεύεις το password, παρά μόνο το ID του χρήστη πχ, και παίρνεις ότι χρειάζεσαι από τη βάση. Link to comment Share on other sites More sharing options...
UltraB Μάϊος 23, 2016 Author #7 Κοινοποίηση Μάϊος 23, 2016 Βρε συ, εγώ θέλω να κρατάω τα στοιχεία όπως είναι (από text) κάπου στο τρέχον πρόγραμμα. Δε με ενδιαφέρει ουδεμία η ασφάλεια για αυτό δεν έχω κάνει λόγο και σε sda, md5 και εγώ δε ξέρω τι. Δε θα βγει κάπου, δε θα το χρησιμοποιήσει κάποιος, ένα απλό project είναι. Link to comment Share on other sites More sharing options...
Delijohn Μάϊος 23, 2016 #8 Κοινοποίηση Μάϊος 23, 2016 Με δεδομένο πως δεν σε ενδιαφέρει η ασφάλεια ΚΑΘΟΛΟΥ, το πιο απλό που μπορείς να κάνεις είναι: 1) Από το πεδίο του login, βάζεις σε 2 μεταβλητές τα στοιχεία εισόδου. Α για το userid και Β για το password. Επίσης δηλώνεις μια boolean C η οποία είναι false. 2) Στο πάτημα του κουμπιού, θα χρησιμοποιείς το connection με τη βάση και θα ρωτάς τη βάση αν ο χρήστης με userid Α, έχει για password το B. Τόσο απλό. 3) Αν ναι, η C θα γίνεται True και θα πηγαίνεις παρακάτω κρατώντας τις τιμές στα Α και Β. Αν όχι, η C θα παραμένει False και θα δίνεις κενό string σαν αρχικοποίηση στα Α και Β. Και ξανά από την αρχή. Πιο απλά δε νομίζω να γίνεται. Η C απλά βοηθά στον έλεγχο που θα έχεις, για το αν θα πας "παρακάτω". Link to comment Share on other sites More sharing options...
UltraB Μάϊος 23, 2016 Author #9 Κοινοποίηση Μάϊος 23, 2016 Αυτό που θέλω να κάνω είναι να αντλώ τα στοιχεία του χρήστη (όλα ή σχεδόν όλα) από τη βάση ώστε να τα χρησιμοποιώ στο προφιλ του πχ. Έτσι όπως τα λέει @Delijohn το έχω υλοποιήσει προς το παρόν για να βοηθήσω. Με λίγα λόγια θέλω να κρατάω κάπου τα στοιχεία της βάσης δεδομένων του χρήστη μέχρι να κάνει logout. Ή μήπως να μη τα κρατάω καν και να ξανακάνω Query όταν πάει να μπει στο προφίλ το πχ βάση του ονόματος που μου έδωσε στο login; Link to comment Share on other sites More sharing options...
Delijohn Μάϊος 23, 2016 #10 Κοινοποίηση Μάϊος 23, 2016 Δεν είναι λογικό και δεν σε συμφέρει κι από άποψη ταχύτητας και πόρων, να τα κρατάς όλα από την αρχή. Δεν τραβάς πολλά. Μόνο το password για το id που θα σου δώσει. Αν παίξει, πας παρακάτω. Ανοίγεις καρτέλα προφίλ; Ανοίγεις τα στοιχεία του. Αν είναι λίγα σε μεταβλητές, αν είναι πολλά, σε ένα πινακάκι. Προσπαθείς απλά κ μπακαλίστικα, οπότε δεν έχει κ νόημα να τα φέρνεις όοοοολα. Link to comment Share on other sites More sharing options...
UltraB Μάϊος 23, 2016 Author #11 Κοινοποίηση Μάϊος 23, 2016 Ωραία, πάμε παρακάτω. Πως μπορώ να υλοποιήσω το παρακάτω; Τα στοιχεία θα αντλούνται από τη βάση. Ο κώδικας που χρησιμοποιώ τώρα το μόνο που κάνει είναι ακριβώς το ίδιο με το Select * from ..... της SQL. Μου επιστρέφει δηλαδή τα ονόματα των column ενός table και τα στοιχεία τους σε ένα table. Αν θέλετε μου λέτε και τον ποστάρω. Ψάχνω δηλαδή το αντίστοιχο.............. mysqli_fetch_assoc .......... $row["column"] Link to comment Share on other sites More sharing options...
nucleus Μάϊος 24, 2016 #12 Κοινοποίηση Μάϊος 24, 2016 Καταρχήν java as in java desktop app ή java web app (δηλαδή jsp/servlet)? Link to comment Share on other sites More sharing options...
UltraB Μάϊος 24, 2016 Author #13 Κοινοποίηση Μάϊος 24, 2016 Όχι για web. Java app. Link to comment Share on other sites More sharing options...
nucleus Μάϊος 24, 2016 #14 Κοινοποίηση Μάϊος 24, 2016 https://docs.oracle.com/javase/tutorial/jdbc/basics/jdbcswing.html Αν και νομίζω ότι είναι με swing και όχι με javafx Link to comment Share on other sites More sharing options...
Inglor Μάϊος 24, 2016 #15 Κοινοποίηση Μάϊος 24, 2016 πριν 2 ώρες, το μέλος nucleus έγραψε: https://docs.oracle.com/javase/tutorial/jdbc/basics/jdbcswing.html Αν και νομίζω ότι είναι με swing και όχι με javafx Δεν έχει σημασία η υλοποίηση για το fetch από την βάση πρέπει να είναι κοινή. Το πώς τα δείχνεις είναι αλλο θέμα (swing / javafx) 1 Link to comment Share on other sites More sharing options...
nucleus Μάϊος 24, 2016 #16 Κοινοποίηση Μάϊος 24, 2016 Το ανέφερα επειδή για αρκετούς πια το swing θεωρείται ξεπερασμένο και προτείνουν το javafx. Απο την άλλη ξαναβλέποντας το url λέει jdbcswing οπότε είναι σίγουρα με swing Πάντως θα είναι ωραία εξάσκηση να δει τον κώδικα σε swing και να το υλοποιήσει σε javafx Link to comment Share on other sites More sharing options...
UltraB Μάϊος 24, 2016 Author #17 Κοινοποίηση Μάϊος 24, 2016 Δεν έχω νέα σχετικά με αυτό διότι ασχολιόμουν ένα άλλο πράγματα (login, register, methods, etc). Κάτι άλλο, πως μπορώ να κρύψω ή να εμφανίσω ένα κουμπί; Όχι enabled, disabled. Θέλω να μην φαίνεται καν σε ορισμένες περιπτώσεις πχ. Link to comment Share on other sites More sharing options...
nucleus Μάϊος 25, 2016 #18 Κοινοποίηση Μάϊος 25, 2016 https://docs.oracle.com/javase/7/docs/api/index.html?javax/swing/JButton.html Παράθεση setVisible public void setVisible(boolean aFlag) Makes the component visible or invisible. Overrides Component.setVisible. Overrides: setVisible in class Component Parameters: aFlag - true to make the component visible; false to make it invisible See Also: Component.isVisible(), Component.invalidate() Υπάρχει το παραπάνω method για το JButton inherited απο το javax.swing.JComponent Java Tutorial http://docs.oracle.com/javase/tutorial/uiswing/components/button.html 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now