validaciones mvc mensajes internacionalización formularios formulario form español bindingresult spring spring-security

spring - mvc - autenticación de seguridad de primavera utilizando la dirección IP y la contraseña de usuario



spring mvc español (3)

Para resolver su problema, debe implementar un proveedor de autenticación personalizado (que puede estar basado en DaoAuthenticationProvider o puede implementarse desde cero, etc.). Este proveedor de autenticación debe estar registrado en el conjunto de proveedores del administrador de autenticación. Además, este proveedor tendrá la propiedad de tipo HttpServletRequest HttpServletRequest , relacionada con la solicitud HTTP de contexto. Luego, cuando realiza autenticación de HttpServletRequest.getRemoteAddr() través de ese proveedor, puede obtener la dirección IP de usuario invocando HttpServletRequest.getRemoteAddr() . Código:

/** * IP address based authentication provider */ @Service public class IPAddressBasedAuthenticationProvider extends AuthenticationProvider { /** * Context http request */ @Autowired private HttpServletRequest request; @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String ipAddress = request.getRemoteAddr(); //do authentication specific stuff (accessing users table in database, etc.) //return created authentication object (if user provided valid credentials) } }

Configuración:

<security:http auto-config="true" authentication-manager-ref="authenticationManager" use-expressions="true"/> <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager"> <constructor-arg name="providers"> <list> <ref bean="iPAddressBasedAuthenticationProvider"/> </list> </constructor-arg> </bean>

Además, puede agregar otros proveedores de autenticación (si es necesario). Espero que esto ayude. Enlaces: AuthenticationProvider ProviderManager

Estoy utilizando el método loadUserByUsername para autenticar al usuario, sin embargo, también debo validar contra direcciones IP permitidas.

Pero cuando intento

SecurityContextHolder.getContext().getAuthentication();

obteniendo nulo.

Por favor, consulte cómo puedo acceder a la dirección IP del cliente de los usuarios mientras autentico al usuario.


Está implementando el método loadUserByUsername de UserDetailsService.

Según la documentación A menudo existe cierta confusión sobre UserDetailsService. Es puramente un DAO para los datos del usuario y no realiza ninguna otra función que no sea suministrar esos datos a otros componentes dentro del marco. En particular, no autentica al usuario, lo que hace el AuthenticationManager. En muchos casos, tiene más sentido implementar AuthenticationProvider directamente si requiere un proceso de autenticación personalizado.

UserDetails userDetails= customUserDetailsService.loadUserByUsername("name");

esto le dará un objeto userDetails. Puede hacer todo el código relacionado con la autoridad en loadUserByUsername (). Si desea configurar manualmente un usuario autenticado en Spring Security, siga el código.

Authentication authentication= new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()) ; SecurityContextHolder.getContext().setAuthentication(authentication);

Obtendrá la dirección IP del encabezado de la solicitud.

¿Cómo puedo recuperar la dirección IP del encabezado HTTP en Java?

puedes hacer eso en algún lugar de la cadena de filtros de seguridad de primavera.


/** * IP address based authentication provider */ @Service public class IPAddressBasedAuthenticationProvider extends AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { final WebAuthenticationDetails details = (WebAuthenticationDetails) auth.getDetails(); details.getRemoteAddress(); } }