Configurando Spring Security 3.0 y actualizando con Maven

Vamos con algo sencillo el día de hoy. Ante la llegada hace unos meses ya de Spring Security 3.0 y con estupendas novedades y sus cambios.

Si ya has migrado te habrás dado cuenta que muchos de los nombres de los paquetes han cambiado.

import org.springframework.security.Authentication;
import org.springframework.security.context.SecurityContext;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.security.context.SecurityContextImpl;
import org.springframework.security.providers.openid.OpenIDAuthenticationStatus;
import org.springframework.security.providers.openid.OpenIDAuthenticationToken;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;

antes se llamaban

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.context.SecurityContextImpl;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.openid.OpenIDAuthenticationStatus;
import org.springframework.security.openid.OpenIDAuthenticationToken;

No solo estas clases han cambiado, en mi migración de hace unos dias me encontre que con el 70% de las clases que usaba habian sido cambiadas, fue todo un dolor de cabeza al principio.

Nota: no te olvides de agregar los filtros en el web.xml eso no ha cambiado para nada en la 3.0.

Actualizando con Maven

Yo ahora mismo estoy trabajando con la versión 3.0.2.RELEASE y es bastante estable aunque tiene un bug con la integración en Spring Web Flow.

El uso de propiedades en Maven es muy recomendable, si mañana quieres actualizar a otra versión es mucho mas comodo cambiar en un solo lugar, existen muchos otros JAR disponibles en Spring Security como (CAS, ASL o Spring Web) que tambien puedes agregar como dependencia, segun tus necesidades.

 
 <properties>
    <spring.security.version>3.0.2.RELEASE</spring.security.version>
 </properties>
 
<dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-core</artifactId>
      <version>${spring.security.version}</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-ldap</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-openid</artifactId>
    <version>${spring.security.version}</version>
    <scope>compile</scope>
  </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-taglibs</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>${spring.security.version}</version>
</dependency>

Otra cosa que debes modificar o agregar si es una nueva configuración es en los namespaces.

 
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:security="http://www.springframework.org/schema/security"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-3.0.xsd">
</beans>

Configuración Mínima

Spring Security 3.0 nos permite desde una configuración sencilla hasta las mas completas, según la documentacion esto es lo mínimo que necesitas.
En este caso se podria llamar una versión amateur de la configuración real con beans en Spring Security, ellos nos ofrecen este una version resumida de la configuracion, siendo la mínima lo siguiente

 
<http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_USER" />
</http>

Y pudiendose extender a algo mas complejo (complejo dentro de la sencille) como:

  <security:http auto-config="false"
                 entry-point-ref="authenticationEntryPoint"
                 access-decision-manager-ref="voteAccessDecisionManager" >
    <security:intercept-url pattern="/**" access="ENCUESTAME_ANONYMOUS" />
    <security:intercept-url pattern="/admon/**/*" access="ENCUESTAME_ADMIN" />
    <security:intercept-url pattern="/tweet/" access="ENCUESTAME_ANONYMOUS" />
    <security:intercept-url pattern="/" access="ENCUESTAME_ANONYMOUS" />
    <security:intercept-url pattern="/**/*.xhtml" filters="none" />
    <security:intercept-url pattern="/**/*.css"  filters="none" />
    <security:intercept-url pattern="/images/**" filters="none" />
    <security:intercept-url pattern="/js/**" filters="none" />
    <security:remember-me key="12345" services-alias="_rememberMeServices" />
    <security:anonymous key="12345" />
    <security:logout logout-success-url="/index.html" logout-url="/logout"/>
    <security:custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
    <security:custom-filter position="ANONYMOUS_FILTER"  ref="anonymousAuthFilter" />
  </security:http>

Para aprender algo más sobre los multiples filtros que ofrece Spring Security en versiones anteriores, en este mismo blog postee algunos artículos.

Tags: , ,

Dejar una Respuesta

Spam Protection by WP-SpamFree

© 2009 Jotadeveloper Blog. Nuestros contenidos están bajo licencia Creative Commons mientras no se indique lo contrario,
y pueden reproducirse libremente sin más que mencionar la fuente ("JotaDeveloper") y la URL concreta del artículo original. .

This blog is powered by Wordpress and JotaDeveloperTheme.