JSF User erstellen

Tarantoga

Aktives Mitglied
Hey,
kennt jemand von euch vielleicht einen Guide oder ähnliches der mir bei folgendem Problem hilft.

Ich habe eine Homepage, die soweit funktioniert und nett aussieht. Ich würde gerne die Möglichkeit bieten User zu erstellen und denen dann mehr Funktionen zur Verfügung zu stellen.
Sprich man registriert sich, ist dann angemeldet (sieht man zb. in einem Eck eingeblendet) und kann dann Kommentare posten (ist eine Bandhomepage), erhält einen Newsletter zugeschickt, einen eigenes Profil, etc.

Ich kenn mich gundsätzlich ganz gut mit der Materie aus, weis nur nicht ganz wie ich an dieses spezielle Problem rangehen sollte (hatte es noch nie XD) sodass dann auch eine wirklich effiziente Lösung herauskommt dabei.

Für Tipps wär ich sehr dankbar.
LG
Tarantoga
 

FArt

Top Contributor
Die Suchbegriffe für Google sind Authentifizierung und Authorisierung. Der Rest ist pure Webentwicklung, ohne Schnick-Schnack.
 

brauner1990

Bekanntes Mitglied
Die Register-Funktion kannst du ja über ein einfaches HTML Formular machen, wo du dann in Java die Daten aufbereitest. Und Wenn du den Login realisierst, schreibst du in die Session z.B.
Code:
loggedin=true
; und dies prüfst du dann ab, wenn ja, dann einblenden, sonst nicht.
 

Tarantoga

Aktives Mitglied
Okay, ich scheitere schon bei etwas, wo ich dachte, dass ich es leicht schaffen werde.

Wenn ich die Daten beim erstellen einens neuen Users persisten will, passiert nichts beim Drücken des Submit Buttons.
Hab das schonmal gemacht und da funktionierte es einwandfrei, jetzt irgendwie nicht.

Hier das JSF Formular:

<h:form>

<h3>Gib bitte deine gewünschten Nutzerdaten in untenstehendes Formular ein!</h3>

<h:inputText value="#{userDataManger.username}" /> Benutzername
<br/>
<h:inputText value="#{userDataManger.mailAddress}" /> E-Mail Adresse
<br/>
<h:inputText value="#{userDataManger.mailAddress2}" /> E-Mail Adresse bestätigen
<br/>
<h:inputSecret value="#{userDataManger.pw}" /> Passwort
<br/>
<h:inputSecret value="#{userDataManger.pw2}" /> Passwort bestätigen
<br/>

<h:commandButton value="Submit" actionListener="#{userDataManger.add}" action="#{userDataManger.pageNavigator}" />

</h:form>




Hier der UserDataManager:


@ManagedBean
public class UserDataManger {

@EJB
UserDataServiceEJB service;

private String username;
private String pw;
private String pw2;
private String mailAddress;
private String mailAddress2;


public String pageNavigator () {
if ((getUsername() == null | getMailAddress() == null | getMailAddress2() == null | getPw() == null | getPw2() == null) // Es müssen Zeichen im Textfeld stehen
|| (getUsername().trim().isEmpty() | getMailAddress().trim().isEmpty() | getMailAddress2().trim().isEmpty() | getPw().trim().isEmpty() | getPw2().trim().isEmpty() ) // ------"------
|| (((!getMailAddress().contains("@")) || (!getMailAddress().contains("."))) | ((!getMailAddress2().contains("@")) | (!getMailAddress2().contains("."))) ) // Mailadressen müssen @ und . enthalten
|| (!(getMailAddress().equalsIgnoreCase(getMailAddress2())))
|| (!(getPw().equalsIgnoreCase(getPw2())))
) {

return "RegisterFailed.xhtml";
}
else {
return "RegisterDone.xhtml";
}



}



public void add () {

if ((getUsername() == null | getMailAddress() == null | getMailAddress2() == null | getPw() == null | getPw2() == null) // Es müssen Zeichen im Textfeld stehen
|| (getUsername().trim().isEmpty() | getMailAddress().trim().isEmpty() | getMailAddress2().trim().isEmpty() | getPw().trim().isEmpty() | getPw2().trim().isEmpty() ) // ------"------
|| (((!getMailAddress().contains("@")) || (!getMailAddress().contains("."))) | ((!getMailAddress2().contains("@")) | (!getMailAddress2().contains("."))) ) // Mailadressen müssen @ und . enthalten
|| (!(getMailAddress().equalsIgnoreCase(getMailAddress2())))
|| (!(getPw().equalsIgnoreCase(getPw2())))
) {

}
else {
service.create(new UserData(getUsername(), getPw(), getMailAddress()));
}

}




public String getMailAddress2() {
return mailAddress2;
}

public void setMailAddress2(String mailAddress2) {
this.mailAddress2 = mailAddress2;
}

public String getPw2() {
return pw2;
}

public void setPw2(String pw2) {
this.pw2 = pw2;
}


public String getMailAddress() {
return mailAddress;
}

public void setMailAddress(String mailAddress) {
this.mailAddress = mailAddress;
}

public String getPw() {
return pw;
}

public void setPw(String pw) {
this.pw = pw;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}




}


Wo liegt das Problem?
Vieleicht seh ich das Offensichtliche nicht.
Ist es vielleicht eine EJB Exception?





Außerdem hätte ich noch folgende Frage:

Wenn ich mich nun mit vorhandenem Account anmelden würde, dann durch Abfrage zu -loggedIn=true- komme,
soll ich dann ein Stateful SessionBean verwenden um persönliche Begrüßungen, etc. bereitzustellen, oder einfach auf die Instanzen des EntityObjects auf der DB zugreifen?

LG
Tarantoga
 
Zuletzt bearbeitet:

Tarantoga

Aktives Mitglied
Update:
Also ich bin mir ziemlich sicher das es eine EJB Exception wirft.

In meiner EntityClass steht u.a. die Variable Mail.
Bei der Exception, sagt er, dass er Mail nicht in der DB/UserData finden kann.

Sollte das nicht eigentlich automatisch erzeugt werden?
An was könnte das liegen?
Bis jetzt erzeugte Netbeans das alles von selbst.

UPDATE 2: Okay dieses eine Problem wäre gelöst, hab die Tabelle nochmal gelöscht und dann neu erzeugt.
Jetzt funktionierts.
Wahrscheinlich hab ich zum ersten mal persisted als die Mail Variable noch nicht existiert.
Anscheinend kann man das nicht automatisch ergänzen lassen.

Nach wie vor bin ich jetzt noch bei obigen Problem mit dem Stateful SessionBean


LG
 
Zuletzt bearbeitet:

Tarantoga

Aktives Mitglied
Ich schaffs einfach nicht.
Hab jetzt gegoogelt ohne Ende, aber finde nichts was mir wirklich weiterhilft.
Kann mir vielleicht jemand ein gutes Tutorial vorschlagen, das erklärt wie man gewisse Seiten erst nach einer Sicherheitsabfrage erreichen kann?
Also ich hab beispielsweise eine Startseite, möchte dort ein Anmeldeformular einfügen, welches überprüft ob User und Passwort okay sind und diesem Nutzer dann spezielle Seiten und Rechte zur Verfügung stellt.
Ich steh gerade total an.
Ist vielleicht JAAS the way to go for me?

Das Endprodukt sollte jedenfalls das anbieten, was man bei jedem SocialNetwork, Forum, etc. vorfindet.
Und das ganze halt möglichst sicher.
Bitte helft mir.
 
M

maki

Gast
Recht haste, aber immerhin haben se dann gegooglet
Hehe.. wohl leider nicht gut genug ;)

JAAS ist der off. JEE Standard (auch als Container Managed Security bekannt, Tomcat bietet dafür sog. Realms), dann gibt es noch Spring Security, welches flexibler aber auch komplexer ist, dafür aber nicht standartisiert.
 

Tarantoga

Aktives Mitglied
Ich habe mich jetzt intensiver mit JAAS beschäftigt, und verstehe auch das Prinzip nach dem es arbeitet.
Mit Netbeans habe ich nun eine Webanwendung erstellt, bei der ich hoffe, dass zumindest die Authentication funktioniert.
Letztes Problem ist vorläufig nur die config. Datei.
Die Syntax ist mir klar und auch das ich es vorläufig einfach als Textdatei speichern kann, nur verstehe die Erklärungen nicht wie ich den LoginContext auf diese Datei verweisen kann.

Ich möchte es nicht viaCommand Zeile machen, außerdem benutze ich ja eine IDE.
Hab mir nun einige Tutorials zum Thema durchgelesen (bei Netbeans gibtst leider keines dafür) und soviel herausgefunden, als dass ich die Datei in der SystemProperty java.security.auth.login.config definieren muss.

wörtlich:

"Damit eine Modul-Konfigurationsdatei aktiv wird, muss sie in der System-Property java.security.auth.login.config eingetragen werden. Hierzu kann der Pfad entweder als Parameter des Interpreters java mit der Option -D oder im Programm mit System.setProperty() gesetzt werden:
System.setProperty("java.security.auth.login.config", "jaasdemo.conf");

Falls in der Konfiguration kein Eintrag mit dem gewünschten Namen vorhanden ist, wird automatisch versucht, einen Eintrag mit dem Namen other zu finden. Existiert dieser auch nicht, kommt es zu einer Exception.

Wie erwähnt, benötigt weder das NTLoginModule noch das UnixLoginModule einen CallbackHandler, da sie nicht interaktiv arbeiten. Daher kann die Angabe eines CallbackHandler bei der Erzeugung des LoginContext entfallen (wodurch ein Default-CallbackHandler aktiv wird, dessen Klassenname in der System-Property auth.login.defaultCallbackHandler eingestellt werden kann). Das folgende Minimalprogramm zur Durchführung eines Logins zeigt nach dem Login die vom Modul vergebenen Principals an: "

irgendwie hilft mir das aber nicht vollends.
Kann ich zb. System.setProperty(); direkt beim LoginContext hineinschreiben, oder brauch ich da eine eigene Klasse?
Ich bin einfach noch blutiger Anfänger,
bitte helft mir
 

Tarantoga

Aktives Mitglied
Das stimmt, aber dabei muss ich gar keine eigenen Klassen implementieren, sondern nur realms erstellen, und über Sun und Web.xml roles erstellen und die dann mappen. Ich glaube es basiert auf jaas, aber ist irgendwie trivialer, weil glassfish anscheinend vieles automatisiert.
Weis es aber selbst nicht,
Ich würde eben gerne loginContext mit loginmodulen und callbackhandler selbst erstellen.
Da steh ich nach wie vor bei der Config Datei an.
Die Datei ansich ist mir klar, hab aber keine ahnung wie ich der IDE klarmachen soll wo diese zu finden ist.
 

GuPhisch

Mitglied
Hi,

Du kannst in den Einstellungen des Projektes der VM Parameter übergeben. Hierzu musst Du einfach in der Menüleiste auf Ausführen->Projektkonfiguration festlegen -> anpassen gehen. Hier musst du dann den Parameter nach felgendem Aufbau eintragen: Djava.security.auth.login.config==PfadZurDatei

Habe das vor kurzem mal mit Eclipse gemacht, da hat es dann so funktioniert. Sollte bei Dir dann auch klappen. Kann sein das Du vor dem D noch ein Minus eintragen musst, bin mir da nicht mehr sicher ob ich das damals eingetragen habe oder ob der Parameter so genommen wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
TRunKX hx:commandExButton DAtei erstellen und dem User zum Download Allgemeines EE 7
B eine vom Admin hochgeladene csv -Datei in der Datatable auch von jedem User sichtbar Allgemeines EE 0
OnDemand JSF Growl Message an User senden Allgemeines EE 13
C Fotoverwaltung in einer Multi-User Anwendung Allgemeines EE 4
P Nur ein User für Web Application Allgemeines EE 11
G Multi User Problem Allgemeines EE 8
B Tomcat -> Funktions User Credentials hinterlegen Allgemeines EE 7
A Mehrere User gleichzeigig, wie mach ich das? Allgemeines EE 14
F FORM Auth in JBoss für User mit falscher Rolle ? Allgemeines EE 2
B Session Daten pro User merken Allgemeines EE 9
I EMail Bestätigung bei neuem User Allgemeines EE 3
B Woher kommt der User? Verweise . Links . Allgemeines EE 2
OnDemand CDI Ein Objekt erstellen Allgemeines EE 10
T Teamkalender mit JSF erstellen Allgemeines EE 4
OnDemand War File erstellen Allgemeines EE 1
D Bild erstellen und anzeigen lassen Allgemeines EE 4
T HttpSession von Hand erstellen Allgemeines EE 4
C Software ztum Erstellen von EntityBeans Allgemeines EE 5
M Checkboxes dynamisch erstellen Allgemeines EE 8
M Erstellen LogDatei Allgemeines EE 2
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
Q Dynamische Formulare aus xml Dateien erstellen... Allgemeines EE 8
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
O webservice mit java erstellen. was brauch ich alles dazu? Allgemeines EE 53
N Axis2 lauffähiges Beispiel erstellen Allgemeines EE 3
N Menu dynamisch erstellen Allgemeines EE 3
O JSP dynamisch aus einem objekt heraus erstellen Allgemeines EE 7
R SUCHE: log4j.properties - Hilfsprogramm zum Erstellen Allgemeines EE 2
L Flirtseite erstellen Allgemeines EE 2
clemson Ordner auf Linux-Server erstellen --> Rechteproblem Allgemeines EE 5
I Erstellen von EAR's mit Ant Allgemeines EE 2
P Sessions von Hand erstellen und zerstören Allgemeines EE 3
B tabellen erstellen mit jboss Allgemeines EE 7
L Topic oder Queue in JBoss erstellen Allgemeines EE 3

Ähnliche Java Themen


Oben