<commit_before># spring-sec-custom
Ejemplo de configuracion custom para SpringSecurity 3.2.8.RELEASE.

## Detalle.
Este código muestra como resolver dos escenarios comunes al usar spring-security más allá del "out-of-the-box".
Todo en un contexto WEB

Problema a resolver 1.
  Se requiere un mecanismo personalizado para validar las credenciales recibidas del formulario web.
  Esto se resuelve usando un: CustomAuthenticationProvider implements AuthenticationProvider 

Problema a resolver 2.
 Se requiere que el formulario de login permita ingresar 2 campos adicionales a:
 user, pwd.
 Esto se soluciona usando:
  * CustomWebAuthenticationDetailsSource implements AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> 
  Y
  * CustomWebAuthenticationDetails extends WebAuthenticationDetails 


[WebAuthenticationDetails](http://docs.spring.io/autorepo/docs/spring-security/3.2.8.RELEASE/apidocs/org/springframework/security/web/authentication/WebAuthenticationDetails.html) proporciona por default getters:  *getRemoteAddress()* y *getSessionId()*, en escencia, lo que se hace es extender esta clase para permitirle contener los campos extras requeridos y poder ofrecerlos al *AuthenticationProvider*.

Todo se ve mejor en el archivo de configuración de spring:

```xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<commit_msg>Se redacta la solución alcanzada<commit_after># spring-sec-custom
Ejemplo de configuracion custom para SpringSecurity 3.2.8.RELEASE.

## Detalle.
Este código muestra como resolver dos escenarios comunes al usar spring-security más allá del "out-of-the-box".
Todo en un contexto WEB

### Problema a resolver 1.
  Se requiere un mecanismo personalizado para validar las credenciales recibidas del formulario web.
  Esto se resuelve usando un:

  CustomAuthenticationProvider implements AuthenticationProvider 

### Problema a resolver 2.
 Se requiere que el formulario de login permita ingresar 2 campos adicionales a:
 user, pwd.
 Esto se soluciona usando:
```java
   CustomWebAuthenticationDetailsSource implements AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> 
```

  Y

```java
  CustomWebAuthenticationDetails extends WebAuthenticationDetails 
```

[WebAuthenticationDetails](http://docs.spring.io/autorepo/docs/spring-security/3.2.8.RELEASE/apidocs/org/springframework/security/web/authentication/WebAuthenticationDetails.html) proporciona por default 2 getters:
   * getRemoteAddress() y
   * getSessionId(), 

En escencia, lo que se hace es extender esta clase para permitirle contener los campos extras requeridos y poder ofrecerlos al *AuthenticationProvider*.

Todo se ve mejor en el archivo de configuración de spring:

```xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
{'fraction_non_alphanumeric': 0.07730101539469375, 'fraction_numerical': 0.009498853586636095, 'mean_word_length': 5.389121338912134, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 8}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1390041', 'n_tokens_mistral': 916, 'n_tokens_neox': 879, 'n_words': 270}