JBOSS SEAM – Unternehmens-Login Komponenten

Samstag, 5. Februar 2011 von  
unter Fachartikel Architektur

Dieser Artikel erklärt an einigen Beispielen, wie man unter Einsatz des JBOSS SEAM Frameworks und der Seam Gen-Anwendung leicht vorteilhafte Unternehmens-Login Komponenten generieren und deren Anbindung an komponentenbasierte JBOSS SEAM Applikationen realisieren kann. Zielgruppe des Artikels sind Java Entwickler mit klassischen Java Web Entwickler-Kenntnissen und JBoss Seam Kenntnissen, die bereits Erfahrungen mit deklarativen Login Komponenten oder Login Komponenten für Web- oder Unternehmens-Anwendungen haben, oder diese und ähnliche Erfahrung ergänzen möchten.
Es wird nun erläutert, welche Login-Komponenten für Unternehmens-Anwendungen mittels JBOSS SEAM generiert werden und wie diese für die Authentication mit zusätzlicher Authentikations-Logik erweiterbar sind. Für eine erste Einführung in die einzelnen Komponenten eines JBoss Seam Enterprise Projekts wird der bereits vorhandene Artikel in diesem Blog empfohlen [link: http://www.binaris-informatik.de/?p=327].

Hier nun die Erklärungen zum Einsatz der erzeugten Klassen für die Unternehmens-Login Komponenten auf der Grundlage eines z.B. mit dem SEAM-eigenen Generator Seam Gen erzeugten Seam Basis-Projekts, welches durch das Erweitern der angelegten Klassen zur Authentication vervollständigt wird.

Beispielprojekt

Der Einstieg in die Arbeit mit JBOSS SEAM Login Komponenten und Authentication wird in diesem Artikel anhand einiger annotierter Login-Klassen veranschaulicht. Die Beispiele sind einfache Fragmente zur Erzeugung eines voll funktionsfähigen Unternehmens-Logins, welches auf dem JBoss Application Server läuft.

Für das Erstellen des Beispielprojekts wurden die folgenden Pakete und Komponenten verwendet: Als flexible Entwicklungsumgebung Eclipse 3.6 Helios in der JEE 64bit Version, als Application Server der JBOSS in Version 5.1. Um mit Eclipse eine komfortable Steuerung des JBOSS AS zu ermöglichen, wurden die JBOSS Tools als Plugin installiert. Für das Beispielprojekt wurde die SEAM Version 2.2.0 verwendet, die unter der bekannten Web-Adresse [link: http://seamframework.org/Seam2/Downloads ] zum Download bereit steht.

Erste Schritte

Ein Projekt als Beispielapplikation kann schnell gemäß den SEAM Vorgaben angelegt werden. Hierfür wird die Anleitung in diesem Blog empfohlen [link: http://www.binaris-informatik.de/?p=327]. Nach erfolgreichem Anlegen per Seam Gen erfolgt das Einfügen des Projektes in eclipse. Innerhalb des Workspace befindet sich nun also ein konfiguriertes und ausführbares Projekt, welches bereits die gewünschten Klassen für die Login Komponenten und Authentication enthält. Der Einsatz der Login Komponenten auf dem JBOSS SEAM und deren weitere Implementierung der Authentikations-Logik für Unternehmens-Applikationen und deren Annotierung werden im Folgenden an einfachen Beispielen erläutert:

LOGIN und AUTHENTIKATIONSKLASSEN

JBOSS SEAM generiert bei Verwendung von Seam Gen eine out-of-the-box Login- und Authentikations-Komponente, die in der klassischen Web-Entwicklung, z.B. über web.xml-Konfiguration, ihresgleichen sucht.

Dabei wird per Seam Gen eine Klasse Authenticator generiert. Diese Klasse Authenticator ist für die Benutzer Authentifizierung zuständig. Versucht sich der Benutzter einzuloggen, ruft die identity.login() Methode die authenticator.authenticate() Methode auf und kann anhand dieser Methode ein erfolgreiches oder erfolgloses Einloggen festlegen.

Dort kann die spezielle Logik mit zusätzlichen Bedingungen für erfolgreiches Einloggen implementiert werden. Ein Benutzer kann z.B. nur dann eingelogt werden, wenn der Username und das Password mit den Daten aus der Datebank übereinstimmen und sich der Benutzter nicht als „Guest“, „guest“, oder „GUEST“ et al versucht einzuloggen: [Sourcecode]

import java.util.List;

import javax.ejb.Stateless;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernate.criterion.Restrictions;

import org.jboss.seam.ScopeType;

import org.jboss.seam.annotations.In;

import org.jboss.seam.annotations.Name;

import org.jboss.seam.annotations.Out;

import org.jboss.seam.security.Identity;

 

@Stateless

@Name(„authenticator“)

public class Authenticator implements IAuthenticator {  

    @PersistenceContext

    private EntityManager em;

    @Out(required=false, scope=ScopeType.SESSION)

    private User user;   

    @In (required=false)

    Identity identity;

    public boolean authenticate() {

        if( identity.getUsername().toUpperCase().equals(„GUEST“) )

            return false;

        List<User> users = getUsersFromDatabase();

        if(users.size()==0)

            return false;

        else{

            user = users.get(0);

            return true;

        }

    }

    private List<User> getUsersFromDatabase(){

        Session session = (org.hibernate.Session) em.getDelegate();   

        Criteria userCriteria = session.createCriteria(User.class);   

        userCriteria.add(Restrictions.eq(

            „username“, identity.getUsername()))

            .add(Restrictions.eq(„password“, identity.getPassword()));

        return (List<User>) userCriteria.list();

    }

}

Logischerweise bietet JBOSS SEAM auch die Möglichkeit der Authentication an einem Drittsystem, z.B. einem Chat Server. Für die Implementierung eines Unternehmens-Chats mit dem SMACK-API wird auf den Artikel „JBOSS SEAM – Unternehmens-Chat mit dem SMACK API“ in diesem blog verwiesen.

Für die Anmeldung an einem Chat Server könnte die JBOSS SEAM Login Komponente mit der Authenticator Bean folgendermaßen aussehen: [Sourcecode]

import org.jboss.seam.annotations.In;

import org.jboss.seam.annotations.Logger;

import org.jboss.seam.annotations.Name;

import org.jboss.seam.log.Log;

@Name(„authenticator“)

public class Authenticator {

    @Logger private Log log;

    public boolean authenticate() {

        //write your special authentication logic here

        //return true, if the authentication was

        //successful, false otherwise

        return true;

    }

}

Dann würde die Authentication durch die erfolgreiche Anmeldung am Chat Servermit den zugehörigen Credentials in der login() Methode der ChatAction erfolgen: [Sourcecode]

import org.jboss.seam.ScopeType;

import org.jboss.seam.annotations.In;

import org.jboss.seam.annotations.Out;

import org.jboss.seam.security.Credentials;

import org.jboss.seam.security.Identity;

@Scope(ScopeType.SESSION)

@Name(„chataction“)

public class ChatAction {

    @In

    Identity identity;

    @In

    Credentials credentials;

    public boolean login() {

    if (connection == null) {

        connection = new XMPPConnection(„jabber.org“);

        try {

            connection.connect();

            connection.login(credentials.getUsername(),

            credentials.getPassword());

        } catch (XMPPException xmppe) {

            xmppe.printStackTrace();

        }

    }

    if (connection.isAuthenticated()) {

        userList.addUser(credentials.getUsername());

        return true;              

    } else

        return false;

    }

[…]

}

Dieser Artikel hat als Quelle Beispielcodes aus den SEAM Examples und Inhalte aus der offiziellen, frei verfügbaren JBOSS SEAM Dokumentation mit dem Titel “Seam – Contextual Components, A Framework for Enterprise Java 2.2.0.GA“ von den Autoren Gavin King, Christian Bauer et al als auch eigene Erfahrungen mit dem JBOSS SEAM Framework zur Grundlage.

Kommentare

2 Kommentare zu “JBOSS SEAM – Unternehmens-Login Komponenten”

  1. Von Services – mit Spring Security, Spring WebFlow, MVC : binaris informatik GmbH am Sonntag, 23. März 2014 23:43

    […] gibt in diesem Blog bereits einen Eintrag zur Unternehmens-Login Komponente mit dem JBoss hier, weshalb bei dieser Gelegenheit auf die von RedHat bereits vorhandenen org.jboss.*-Packages und […]

  2. Von Architekturen – mit Spring CDI, JPA, JBoss, JavaEE : binaris informatik GmbH am Dienstag, 1. Juli 2014 22:15

    […] ein Framework wie Seam Security verwendet. Über das Unternehmens-Login mittels JBoss Seam gibt es hier bereits einen Blog-Eintrag. In Spring wird auch gerne das Spring Security Framework verwendet, […]

Einen Kommentar hinzufügen...

Sie müssen registriert und angemeldet sein um einen Kommentar zu schreiben.