Authentifizierung und Sessions in Java EE7

Status
Nicht offen für weitere Antworten.

weizenhuhn

Neues Mitglied
Hallo liebes Java Team!

Ich verwende:
Java EE7
Applikationsserver: Wildfly
Build-Tool: Maven
Datenbank: JPA Hibernate H2
IDE: Eclipse Luna

Meine Aufgabenstellung:
Einen Newsfeed zu erzeugen für zwei verschiedene User: Publisher (News erzeugen) und Reader (News ansicht).

Meine Frage:
Wie erstellt man denn am besten einen Login und biete zwei verschiedene Ansichten, für die selbe index.xhtml an?


Ich habe eine abstrakte Klasse User erstellt und davon Publisher und Reader abgeleitet, da der username der Primary Key sein soll. Es ist auch schon möglich User zu registrieren indem man username und PAsswort eingibt und anschließend eine Rolle wählt. In meiner Klasse Usercontroller wird dynamisch entschieden ob eine Instanz von Reader oder Publisher erzeugt wird und anschließend persistiere ich den User in der Datenbank. Dies klappt soweit, allerdings weiß ich nicht, wie ich nun zuvor eine Authentifizierung erstelle und mit Sessions arbeiten kann?

Aus einem Buch habe ich eine Methode gefunden, in der man in der standalone.xml eine <Security-Domain> erzeugt. Allerdings weiß ich hier nicht genau, welche Query-Abfrage ich hier bei <module-option name="rolesQuery"> machen kann?
Auf einer anderen Seite (JSF 2 Login Filter Example - Programmer's lounge ) habe ich eine Möglichkeit mit einem Login-Filter gefunden. Was ist denn jetzt die bessere Lösung?

Ich wäre für jede Hilfe sehr dankbar und würde mich auch über Links zu guten Tutourials dazu freuen.


einige Code Auszüge:
user.java #10083322 - Pastie
userController.java #10083324 - Pastie
register.xhtml Private Paste - Pastie
lg
 
Zuletzt bearbeitet:
Ich kann mich nur bedingt zum Wildfly äußern aber für Login bzw. Security gibt es Standards. Es ist natürlich möglich mit Filtern da etwas selbst zu basteln, aber nicht empfohlen.
Das Vorgehen ist eigentlich ganz einfach. Du legst in der web.xml entsprechende Einträge an. Hie mal vereinfacht:
Java:
  <security-constraint>
    <display-name>Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <url-pattern>/test/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>administrators</role-name>
      <role-name>developers</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Authentication Area</realm-name>
  </login-config>
  <security-role>
    <role-name>administrators</role-name>
  </security-role>
  <security-role>
    <role-name>developers</role-name>
  </security-role>
Dein Java-Server muss laut Standard ein Möglichkeit bieten security-role zu konfigurieren/füllen. Ich verwende da meist die LDAP-Config und binde unser Active Directory an. Datenbanktabellen sind aber bei meinem JEE-Server auch möglich. Bei mir gibt es da einen Wizard mit Vorbelegungen. Das ist dann die Stelle, welche im vom Wildfly nicht kenne.
Im Prinzip wird jedem Nutzer ein oder mehrere 'security-role' zugewiesen (z.B. Datenbank, AD, LDAP) und in der Anwendung wird dann deiner URL/Endpunkt ebenfalls ein oder mehrere 'security-role' zugewiesen (i.d.R. einfach per Annotation). Wenn der Nutzer dann über eine Rolle des Endpunktes verfügt, dann darf er da zugreifen.
Das Prinzip ist also ziemlich simpel und sicher, wenn man sich daran hält. Es gibt da eig. nichts zu programmieren - außer für die Registrierung der Nutzer, wenn man das intern machen möchte.

Die Anpassung der Seite an den Nutzer oder auch einzelner Komponenten erfolgt dann innerhalb deiner Anwendung - wie auch immer du das machen willst - JavaScript, dynamisches HTML oder wie auch immer.

 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben