Open Registry of Game Information 

  • Aktuelle Änderungen im Programmcode

  • Alles für Entwickler: Java, JavaScript, REST-API, AngularJS, HTML.
Alles für Entwickler: Java, JavaScript, REST-API, AngularJS, HTML.

Moderators: MZ per X, gene

 #36579  by gene
 30 Dec 2012, 18:58
Dieser Thread soll dazu dienen, dass jeder Entwickler beschreibt, was er im Programmcode geändert oder hinzugefügt hat.
So können die anderen Entwickler (werden hoffentlich bald mehr) sehen, wer kürzlich was wo gemacht hat und müssen nicht versuchen, den Programmcode selbst zu interpretieren.
 #36580  by gene
 30 Dec 2012, 23:01
Am Thema User Management habe ich grundlegende Dinge ausprobiert und umgesetzt:
  • Es gibt jetzt ein Registrierungs-Formular unter http://demo.oregami.org/register
  • in der Klasse "RegisterActionBean" wird zunächst über Stripes-interne Validierung ("@ValidateNestedProperties") gerpüft, dass keines der Felder leer ist
  • wenn alle Felder gefüllt sind, wird die Methode "validateRegister" aufgerufen, darin wird wiederum die Methode IUserService.register(user) aufgerufen
  • ggf. aufgetretene Fehlermeldungen des Service-Aufrufs werden an Stripes über "SimpleError"s an den ActionBeanContext zurückgegeben
  • die Zuordnung der aufgetretenen Fehler (ServiceError) im Service-Aufruf zu dem betreffenden Web-Formular-Feld erfolgt über die Eigenschaft "serviceError.getContext().getField()", was also z.B. "user.username" enthält, wenn die Validierung des Services ergeben hat, dass bereits ein User mit dem Usernamen existiert
  • wenn in der Validierung kein Fehler aufgetreten ist, dann wird die Methode "register" aufgerufen (durch das "name=register" im HTML-Formular in der Datei "register.jsp"), die dann aber nur noch weierleitet an die URL "/login?justregistered". Hier sollte auch noch die Bestätigungs-Mail versendet werden.
  • es fehlt auch noch eine Verschlüsselung des Passworts
Mal sehen, ob sich daraus ein stabiles Muster entwickelt:
  • einfache Validierungen mit Stripes-internen Mitteln durchführen, das erspart Datenbankaufrufe
  • komplexere Prüfungen macht der Service-Aufruf, den das Formular durch eine Validierungsmethode aufruft
  • der Service-Aufruf gibt "ServiceError"s zurück, jeder kann durch den hinterlegten ServiceErrorContext die Information beinhalten, zu welchem Formular-Feld der Fehler gehört und angezeigt werden soll
  • die Ziel-Methode des HTML-Formulars wird dann nur noch aufgerufen, wenn keine Fehler aufgetreten sind

Was mir noch aufgefallen ist:
Leider funktionieren auf dem Tomcat-Server des Demo-Systems die deutschen Fehlermeldungen nicht, es werden seltsamerweise stattdessen die englischen angezeigt. Lokal bei mir (Jetty über die Klasse "Start") funktioniert es in beiden Sprachen (die Fehlermeldungen habe ich zweisprachig, die Formular-Bezeichnungen habe ich noch nicht zweisprachig).
 #36582  by gene
 05 Jan 2013, 23:06
Ich habe mich etwas weitergehend mit dem User-Management beschäftigt.

Das Ergebnis:
  • ich habe Spring Security verwendet, um das Einloggen, Absichern von Webseiten usw. zu realisieren
  • Benutzerregistrierung funktioniert nun, bis auf E-Mail-Prüfung und Validierungs-Mail
  • Passwort wird verschlüsselt gespeichert
  • Einloggen ist nach einer Registrierung möglich
  • Auf jeder Seite gibt es nun unten Buttons zum Einloggen, Ausloggen, Link zu Profil-Seite (ist noch leer)
  • die Seite /admin ist nur für den User "admin" zulässig, bzw. genauer gesagt für Benutzer, die die Rolle "Admin" besitzen
Insgesamt ein großer Schritt nach vorne für unser Projekt, das User-Management ist damit in einer minimalen Version beinahe fertig!
 #36603  by gene
 11 Jan 2013, 21:31
Ich habe die Benutzerregistrierung noch etwas vorangetrieben.
Nach der Registrierung ist der User nun in der Datenbank vorhanden, aber er ist noch "gesperrt". Das wird dadurch erreicht, dass am User ein Objekt des Typs UserStatus vom Typ "Registration" hängt, der noch nicht verifiziert ist. Das wird dann durch einen Klick auf einen Link geschehen, der per Mail bei der Registrierung versendet wird. Eine Mail wird bereits versendet, aber erstmal nur an die Adresse, die in dieser Methode steht:
org.oregami.service.UserServiceImpl.uponSuccessfulRegistration()

Für das Mail-Versenden muss man in der Datei oregami.properties die entsprechenden Daten eines gültigen Mail-Accounts eintragen (nicht committen).
Java versendet dann über den dort angegebenen Mailserver und mit dem dort angegebenen User/Passwort eine Registrierungs-Mail.

Achja, das Mail-Versenden klappt bei mir lokal, auf unserem Demo-System bekomme ich jedoch diesen Fehler:
Code: Select all
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: 501 Syntax: HELO hostname
. Failed messages: javax.mail.MessagingException: 501 Syntax: HELO hostname
; message exceptions (1) are:
Failed message 1: javax.mail.MessagingException: 501 Syntax: HELO hostname
org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:400)
org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:306)
org.oregami.service.UserServiceImpl.uponSuccessfulRegistration(UserServiceImpl.java:62)
org.oregami.service.UserServiceImpl.register(UserServiceImpl.java:86)
org.oregami.action.RegisterActionBean.validateRegister(RegisterActionBean.java:76)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597) 
Hat jemand von euch eine Idee, was das bedeuten könnte?

Insgesamt sind beim Thema Registrierung/Einloggen also wohl nur noch "Restarbeiten" und ein "Rundmachen" zu erwarten...

Als nächstes großes Thema steht dann die Dateneingabe an... Habe mit dafür schonmal das hier angesehen. Damit werden alle gespeicherten Daten "historisiert", d.h. bei einer Änderung wird eine neue Version der Daten angelegt, und die alten Versionen kann man dann entsprechend auch abfragen.
 #36621  by gene
 21 Jan 2013, 21:01
Ich habe mich nun einige Abende daran versucht, eine "Historisierung" der gespeicherten Daten zu realisieren.
Dazu habe ich versucht, Hibernate Envers einzubauen. Das soll nämlich genau diese Historisierung übernehmen.

Leider bekomme ich letztendlich immer wieder den gleichen Fehler zur Laufzeit, diesen habe ich nun in einem Spring-Forum gepostet. Mal sehen, ob ich einen hinweis bekomme!