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

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.  
  6. http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  7.  
  8. http://www.springframework.org/schema/security
  9.  
  10.   http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
  11.  
  12.   <s:http>
  13.     <s:intercept-url pattern="/public/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
  14.     <s:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY " />
  15.     <s:http-basic />
  16.     <s:anonymous />
  17.   </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.

Leave a Reply