Archive for October, 2008

Domain Driven Design (2. Trivadis Java Lounge)

Tuesday, October 28th, 2008

Gerade komme ich von der 2. Trivadis Java Lounge zurück. Im heutigen Vortrag mit dem Titel “Domain Driven Design” zeigten Adrian Hummel und Guido Schmutz wie mit Hilfe der Java Persistance API aus einem serviceorientierten “Transaction Script”-Ansatz ein eher OO-getriebenes “Rich Domain Model” entsteht, und wo genau die Vorteile liegen (weniger redundanter Code, erhöhte Testbarkeit und “mehr” Objektorientierung).

Ebenfalls spannend fand ich eine Variante des Builderpatterns, das mit unterschiedlichen Stati und Subklassen arbeitet. Dankeschön an den Gastgeber, es war ein interessanter Abend.

Spring Security 2.0.4 - namespace-based configuration. Teil 1.

Sunday, October 26th, 2008

Mit der Version 2 von Spring Security (vormals Acegi Security) wurde die Konfiguration durch die Einführung neuer Tags erheblich vereinfacht. Die neuen Tags kapseln die Erzeugung der komplexen Filter- und Service-Beans und erhöhen somit die Lesbarkeit der Konfiguration.

Mit dem http-Tag legt der Entwickler die geschützten URLs fest und bestimmt die Authentifizierungsmethode wie z.B. Http Basic oder Forms Authentication.

Im folgenden XML-Schnipsel wird der Webauftritt in einen öffentlichen und einen geschützten Bereich aufgeteilt. Die öffentlichen Seiten beginnen mit dem URL-Prefix /public, alle anderen Seiten erfordern eine Authentifizerung.

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2.    xmlns:s="http://www.springframework.org/schema/security"
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.    xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  6.   http://www.springframework.org/schema/security
  7.   http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
  8.  
  9.   <s:http>
  10.     <s:intercept-url pattern="/public/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
  11.     <s:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY " />
  12.     <s:http-basic />
  13.     <s:anonymous />
  14.   </s:http>

Die Reihenfolge der intercept-url-Tags ist entscheidend. Hier gilt die Regel: “most specific first”. Im access-Attribut gibt der Entwickler ein oder mehrere sog. ConfigAttribute an. Ein ConfigAttribute definiert eine Rolle oder einen Authentifizierungzustand, der benötigt wird, um eine URL aus dem Pattern aufrufen zu können. Ach ja, die Patterns müssen der Ant Pattern Notation entsprechen. Die im Beispiel verwendeten Attribute (IS_AUTHENTICATED_FULLY und IS_AUTHENTICATED_ANONYMOUS) werden in der Klasse AuthenticatedVoter definiert.

Mit dem Tag http-basic hat der Entwickler automatisch eine Http Basic Authentication registriert, d.h. beim Zugriff auf den geschützten Bereich schickt Spring Security die Http Header für die Authentifizierung mit. Der Entwickler braucht sich darum gar nicht mehr kümmern.

Allerdings ist die Konfiguration noch nicht vollständig: Es fehlt noch ein AuthenticationProvider. Zwar haben wir durch das anonymous-Tag einen AnonymousAuthenticationProvider registriert, aber es fehlt natürlich ein Provider für den nicht-anonymen Zugriff, den wir uns im nächsten Teil ansehen werden.

MvnIndex

Tuesday, October 7th, 2008

Der MvnIndex ist äusserst praktisch, wenn man ein neues Projekt mit Maven aufsetzt.
Neben einer “Artifact”-Websuche gibts auch ein Eclipse Plugin für die Suche nach GroupId, ArtifactId und Version.