JSF Login realisieren

Einen wunderschönen guten Morgen.

Ich versuche seit ein paar Tagen ein Login mit JSF hinzubekommen, jedoch klappt der Login nur begrenzt. Wenn ich eine neue Seite nach dem Login aufrufe, bin ich wieder ausgeloggt.

Entweder ich hab nen tierischen Denkfehler, oder ich hab irgendwas übersehen.

Meine Bean:
Java:
package meta.forum;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.*;
import java.util.logging.*;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;

@ManagedBean
@SessionScoped
public class User {

    private String username;
    private String password;
    
    // Verbindungsinformationen zur Datenbank
    
    private String driver = "com.mysql.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/forum";
    private String dbUser = "****";
    private String dbPass = "****";
    
    private static final String salt = "jk2eP0ls";
    
    public User() {
        
    }
    
    public void setUsername(String aUserName) {
        username = aUserName;
    }
    
    public String getUsername() {
        return username;
    }
    
    public void setPassword(String aPassWord) {
        password = aPassWord;
    }

    public String getPassword() {
        return password;
    }
    
    public String createUser() {
        //Verbindung zur Datenbank aufbauen
        try{
            Class.forName(driver);
            Connection con = DriverManager.getConnection(url, dbUser, dbPass);
           
            String qry = "INSERT INTO user VALUES(null, ?, ?)";
            PreparedStatement pstmt = con.prepareStatement(qry);
            pstmt.setString(1, username);
            String aPassword = pwSec(salt + password);
            pstmt.setString(2, aPassword);
            
            pstmt.executeUpdate();
            pstmt.close();
            con.close();
            
            return "index";
                        
        }catch(Exception ex){
            ex.printStackTrace();
            return null;
        }
        
    }
    
    public String login(){
        try{
            Class.forName(driver);
            Connection con = DriverManager.getConnection(url, dbUser, dbPass);
            
            String qry = "SELECT username, password FROM user WHERE username = ? AND password = ?";
            PreparedStatement pstmt = con.prepareStatement(qry);
            pstmt.setString(1, username);
            String aPassword = pwSec(salt + password);
            pstmt.setString(2, aPassword);
            
            ResultSet rs = pstmt.executeQuery();
            
            if(rs.next() && rs.getString("username") != null) {
                
                return "hallo";
            }else{
                return "fail";
            }
            
        }catch(Exception ex){
            ex.printStackTrace();
            return "fail";
        }
    }
    
    private String pwSec(String vPass) throws NoSuchAlgorithmException{
        /* Berechnung */
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(vPass.getBytes());
        byte[] result = md5.digest();

        /* Ausgabe */
        StringBuffer hexString = new StringBuffer();
        for (int i=0; i<result.length; i++) {
            hexString.append(Integer.toHexString(0xFF & result[i]));
        }
        return hexString.toString();
    }
}

Die index.xhtml
HTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Forum</title>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="2" border="0">
                Username: <h:inputText id="username" 
                                       value="#{user.username}"/>        
                Passwort: <h:inputSecret id="password"
                                         value="#{user.password}"/>
            </h:panelGrid>
            <h:commandButton id="submit" 
                             type="submit"
                             value="Login"
                             action="#{user.login}"/>
            <br />
            <h:commandLink id="create"
                            value="Neues Konto erstellen"
                            action="create.xhtml"/>
        </h:form>
    </h:body>
</html>

hallo.xhtml
HTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Login Erfolgreich :D <br/>
        Du bist eingeloggt als #{user.username}.
        <h:form>
            <h:commandLink id="create"
                            value="Weiter..."
                            action="test2.xhtml"/>
        </h:form>
    </h:body>
</html>

Sobald ich dann den Link folge, um auf die 2. Seite geworfen zu werden, werde ich ausgeloggt...
Dabei ist die 2. Seite fast identisch mit hallo.xhtml, es fehlt nur der Link.

Ist es nur nen einfacher denkfehler von mir und ich seh den Wald vor lauter Bäumen nicht, oder hab ich was gravierendes vergessen/ignoriert?

Schonmal vielen dank im vorraus.

Greetz,

Metamorphosis
 
HTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Test HP</title>
    </h:head>
    <h:body>
         #{user.username}.
    </h:body>
</html>

Meiner Meinung nach, müsst dann ja dort auch der Username stehen, aber das ist leider nicht der fall..
 

Fant

Bekanntes Mitglied
Deine USer-Bean ist nicht SessionScoped. Beim Wechsel auf die nächste Seite (test2.xhtml) wird eine neue Instanz der Klasse User angelegt, in der der Wert username noch nicht gesetzt ist. Wieso müsste ich mir genauer anschauen. Vermutlich wird sie nicht als EJB erkannt, weil dein Projekt keine beans.xml-Datei enthält oder ähnliches.
Wenn du statt des von dir importieren Pakets aber das Paket javax.faces.bean.SessionScoped nimmst, dann sollte es funktionieren, wie du es erwartest.

Gruß Fant
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Login wie realisieren? Web Tier 12
platofan23 Java Login Überprüfung ohne Srciptlets in der JSP Web Tier 4
F Formular nach erfolgreichem Login ausblenden Web Tier 0
S JSF Login mit redirect Web Tier 1
J JSF Login/Registrieren Feature mit JBoss AS 7.1.0 Web Tier 0
D Java EE Servlet login Problem Web Tier 1
Q JSF bei Session-Timeout Weiterleitung auf spezielle Login-Seite Web Tier 15
W JSF Login funktioniert nicht Web Tier 12
W JSF Komisches Verhalten nach Login per Realm Web Tier 4
T JSF Login? Web Tier 2
E Login mit JSF 2.0 und Glassfish 3.1.1 (in Netbeans 7.0.1) Web Tier 2
J JSF Mit Enter ein Login bestätigen? Web Tier 3
B JSF Login authentication schaffe ich nicht Web Tier 2
P JSF Login per Ajax validieren. Was ist der Beste Weg? Web Tier 4
T JSP Session Login - Sicherheit Web Tier 4
D JSF 2.0 Login Web Tier 4
I Wie bekomme ich Angaben zum letzten Login Web Tier 2
K JSP Login Code Web Tier 14
G Probleme mit Ajax Login (jsp) Web Tier 5
J Problem mit Login Web Tier 4
G JSF h:form Tag Login über j_security_check und weiterleiten Web Tier 5
console MVC: Servletweiterleitung umgeht Login Authentifizierung Web Tier 2
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
L JSP Tomcat Login Web Tier 6
T html login und apache client Web Tier 13
G WebSeite hinter einem Login auslesen Web Tier 8
D Login mit Filter (JSP/JSF) Web Tier 3
S Wie eine Chatprotokoll realisieren? Web Tier 13

Ähnliche Java Themen

Neue Themen


Oben