tutorial j_spring_security_check hacer ejemplo configuracion con como archivo spring-security

spring-security - j_spring_security_check - spring security tutorial



Crear una autenticación personalizada con Acegi/Spring Security (3)

Recientemente he presentado una aplicación de muestra que realiza una autenticación personalizada con Spring Security 3. El código fuente está aquí . Más detalles están en esta publicación de blog .

Tengo problemas para descubrir exactamente lo que necesito implementar para usar un método de autenticación personalizado con mi aplicación web utilizando Spring Security. Tengo una aplicación Grails con el complemento Spring Security que actualmente usa la autenticación estándar de usuario / contraseña con un formulario de navegador. Esto está funcionando correctamente.

Necesito implementar un mecanismo al lado de esto que implemente un tipo de autenticación MAC . Si la solicitud HTTP contiene varios parámetros (por ejemplo, un identificador de usuario, marca de tiempo, firma, etc.) necesito tomar esos parámetros, realizar algunas comparaciones de hash y firmas / marcas de tiempo, y luego autenticar al usuario.

No estoy 100% seguro de por dónde empezar con esto. ¿Qué clases de Spring Security necesito extender / implementar? He leído la documentación de referencia y entiendo bien los conceptos, pero no estoy muy seguro de si necesito un filtro, proveedor o administrador, o dónde / cómo exactamente crear objetos de autenticación . Me he equivocado tratando de extender AbstractProcessingFilter y / o implementar AuthenticationProvider , pero me quedé atrapado entendiendo cómo hago que todos jueguen bien.


  1. Implemente un AuthenticationProvider personalizado que obtenga toda su información de autenticación de la Authentication : getCredentials() , getDetails() y getPrincipal() .

    Conéctelo a su mecanismo de autenticación Spring Security utilizando el siguiente fragmento de configuración:

<bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider"> <security:custom-authentication-provider /> </bean>

  1. Este paso es opcional, si puede encontrar uno adecuado de implementaciones estándar. De lo contrario, implemente una clase que amplíe la interfaz de Authentication en la que puede colocar sus parámetros de autenticación:

    (e.g. a user identifier, timestamp, signature, etc.)

  2. Extienda un SpringSecurityFilter personalizado que SpringSecurityFilter las dos clases anteriores juntas. Por ejemplo, el filtro puede obtener AuthenticationManager y call authenticate() usando su implementación de Authentication como entrada.

    Puede extender AbstractAuthenticationProcessingFilter como inicio.

    Puede hacer referencia a UsernamePasswordAuthenticationFilter que extiende AbstractAuthenticationProcessingFilter . UsernamePasswordAuthenticationFilter implementa la autenticación estándar de nombre de usuario / contraseña.

  3. Configure su Spring Security para agregar o reemplazar el estándar AUTHENTICATION_PROCESSING_FILTER . Para pedidos de Spring Security Filter, vea http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html#filter-stack

    Aquí hay un fragmento de configuración sobre cómo reemplazarlo con su implementación:

<beans:bean id="myFilter" class="com.example.MyAuthenticationFilter"> <custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/> </beans:bean>


Este es un ejemplo del archivo de configuración securityContext.xml que utiliza autenticación autenticaFiltro (extensión AUTHENTICATION_PROCESSING_FILTER) y authenticationProvider. Los datos de autenticación de usuario son provistos por la conexión jdbc. La configuración es para Spring Security 2.0.x

<?xml version="1.0" encoding="UTF-8"?> <sec:global-method-security /> <sec:http auto-config="false" realm="CUSTOM" create-session="always" servlet-api-provision="true" entry-point-ref="authenticationProcessingFilterEntryPoint" access-denied-page="/notauthorized.xhtml" session-fixation-protection="migrateSession"> <sec:port-mappings> <sec:port-mapping http="80" https="443" /> </sec:port-mappings> <sec:anonymous granted-authority="ROLE_ANONYMOUS" username="Anonymous" /> <sec:intercept-url pattern="/**" access="ROLE_ANONYMOUS, ROLE_USER" /> <sec:logout logout-url="/logoff" logout-success-url="/home.xhtml" invalidate-session="false" /> </sec:http> <bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl" value="/login.xhtml" /> <property name="forceHttps" value="false" /> </bean> <bean id="authenticationProcessingFilter" class="mypackage.CustomAuthenticationProcessingFilter"> <sec:custom-filter position="AUTHENTICATION_PROCESSING_FILTER" /> <property name="defaultTargetUrl" value="/" /> <property name="filterProcessesUrl" value="/logon" /> <property name="authenticationFailureUrl" value="/loginError.xhtml" /> <property name="alwaysUseDefaultTargetUrl" value="false" /> <property name="authenticationManager" ref="authenticationManager" /> </bean> <jee:jndi-lookup id="securityDataSource" jndi-name="jdbc/DB_DS" /> <bean id="myUserDetailsService" class="mypackage.CustomJdbcDaoImpl"> <property name="dataSource" ref="securityDataSource" /> <property name="rolePrefix" value="ROLE_" /> </bean> <bean id="apcAuthenticationProvider" class="mypackage.CustomDaoAuthenticationProvider"> <property name="userDetailsService" ref="myUserDetailsService" /> <sec:custom-authentication-provider /> </bean> <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager"> <property name="providers"> <list> <ref local="apcAuthenticationProvider" /> </list> </property> </bean> </beans>