Este artículo es una traducción del artículo Spring Professional Certification Prep .
Cubrirá el tema de Spring Security y las principales preguntas al respecto.
También se puede usar para prepararse para una entrevista.
↓ Otros artículos están disponibles en los enlaces en la tabla de contenido ↓

Preguntas en sí mismas:
¿Qué es autenticación y autorización?La autenticación es el proceso de verificación del usuario de un sistema informático.
Así es como sucede en primavera:
- La contraseña y el nombre de usuario resultantes se convierten en una instancia de UsernamePasswordAuthenticationToken . Implementa la interfaz de autenticación .
- El token se pasa al objeto
AuthenticationManager
para su verificación. - Si tiene éxito, AM devuelve un objeto de
Authentication
poblado - El contexto de seguridad se establece llamando a
SecurityContextHolder.getContext().setAuthentication(...)
La autorización es el proceso de verificar que el usuario tiene el rol requerido para tomar una acción. Durante la autorización, se verifica si tiene los derechos adecuados para acceder al recurso.
Proceso:
- Por el principal (principal) del usuario, se muestra su rol
- Rol de usuario verificado contra rol de recurso
Primero, se lleva a cabo la autenticación, y luego la autenticación.
¿Cómo funciona la seguridad internamente?Usar proxys Spring AOP que heredan de la clase AbstractSecurityInterceptor.
Se utiliza para métodos que requieren autorización.
La infraestructura web de seguridad se basa en filtros de servlet.
El primer paso es configurar el filtro DelegatingFilterProxy
. FilterChainProxy
la solicitud a FilterChainProxy
.
FilterChainProxy
es un bean que acepta uno o más SecurityFilterChain
en el constructor.
SeccurityFilterChain
compara la URL en la solicitud con una lista de filtros.

Características clave involucradas en Spring SecuritySecurityContextHolder
: contiene y proporciona acceso a SecurityContext en la aplicación.
SecurityContext
: la implementación predeterminada de Spring Security que contiene el objeto de autenticación.
Authentication
: proporciona un token para una solicitud de autenticación o para un principal que se ha autenticado. También contiene una lista de poderes a los que el director tiene acceso.
GrantedAuthority
: contiene la autoridad otorgada al principal GrantedAuthority
.
UserDetails
del usuario: contiene información sobre el usuario: contraseña, inicio de sesión, permisos. Esta información se utiliza para crear un objeto de autenticación después de una autenticación exitosa.
UserDetailsService
: este servicio recupera información sobre el usuario del repositorio (memoria de programa, base de datos, etc.) y la coloca en UserDetails.
¿Qué es un filtro proxy delegado?La clase DelegatingFilterProxy
es una clase que implementa la interfaz javax.Servlet.Filter
.
Este es un filtro especial que delega el trabajo a otros beans, que también son filtros.
¿Qué es la cadena de filtro de seguridad?La cadena de filtros implementa la interfaz SecurityFilterChain
. La implementación proporcionada por Spring Security es DefaultSecurityFilterChain.
El constructor DSFC acepta varios parámetros. El primer parámetro es la solicitud de coincidencia. Los parámetros restantes son filtros que implementan la interfaz servlet.Filter. Aquí están todos los filtros aceptados por DSFC:
ChannelProcessingFilter
SecurityContextPersistenceFilter
ConcurrentSessionFilter
- Cualquier autenticación filter:
UserNamePasswordAuthenticationFilter
/ CasAythenticationFilter
/ BasicAuthenticationFilter
SecurityContextHolderAwareRequestFilter
JaasApiIntegrationFilter
RemeberMeAuthenticationFilter
AnonymusAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
¿Qué es un contexto de seguridad?El objeto principal es un SecurityContextHolder
. Este es el lugar donde se almacenan los detalles sobre el contexto de seguridad actual, por ejemplo, los detalles del principal que está utilizando actualmente la aplicación. Por defecto, ThreadLocal
usa para el almacenamiento.
El objeto devuelto por el método getContext()
es SecurityContext
. Le permite recibir y configurar un objeto de Authentication
.
Authentication
representa las siguientes propiedades:
- El conjunto de poderes otorgados al principal
- Datos para la identificación del usuario (inicio de sesión, contraseña)
- Detalles - agregar. información, si es necesario. Puede ser nulo
- Director
- Indicador de autenticación: variable booleana que indica si el principal pasó la prueba con éxito
¿Cómo configurar una intercepción de clic de usuario en URL específicas? @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()
¿Qué significa * en los métodos antMatchers y mvcMatchers ()?Esta expresión significa "cualquiera".
Hay 2 tipos:
*
- intercepta solo en el nivel en el que se usa.
Por ejemplo, el patrón "/ orders / *" verificará los derechos del usuario si el usuario sigue
/ orders / aliens u / orders / 1, pero no / orders / alien / 1.
**
- intercepta en todos los niveles.
Cualquier solicitud será verificada, / orders / aliens, / orders / 1, / orders / alien / 1.
¿Por qué es más seguro mvcMatcher que antMatcher?Debido a que antMatcher(“/service”)
asigna la ruta de solicitud solo a “/service”
, mientras que mvcMatcher(“/service”)
asigna a “/service”
, “/service.html”
, “/service.abc” .
¿Spring admite el hashing de contraseñas? ¿Qué es la sal?Si lo hace. Hay una interfaz PasswordEncoder
para el hash, que contiene solo un método:
static PasswordEncoder createDelegatingPasswordEncoder()
, que devuelve el DelegatePasswordEncoder
predeterminado.
La sal se usa para calcular el valor hash de la contraseña. Esta es una secuencia de números aleatorios que se utilizan para convertir una contraseña de texto en un hash. La sal se almacena en forma clara junto a la contraseña hash y se puede usar más tarde al convertir una contraseña limpia en un hash con un nuevo inicio de sesión de usuario.
¿Por qué necesitas protección para los métodos? ¿Cómo instalarlo?Spring Security admite la protección de métodos individuales en beans (por ejemplo, en controladores). Esta es una capa adicional de protección para la aplicación.
Debe especificarse explícitamente utilizando la anotación @EnableGlobalMethodSecurity
.
¿Qué hace la anotación @RolesAllowed?Esta anotación se basa en el JSR-250.
@RolesAllowed
permite configurar el acceso a los métodos (por ejemplo, en la clase de controlador) utilizando roles.
Ejemplo: @RolesAllowed(“ADMIN”)
solo permitirá a los usuarios con el rol ADMIN
Para usar, debe establecer @EnableGlobalMethodSecurity(jsr250Enabled=true)
en la clase @Configuration + necesita esta anotación para estar en la ruta de clase.
Cuéntanos sobre @PreAuthorize@PreAuthorize
permite configurar el acceso al método usando SpEL.
Para usar, debe establecer @EnableGlobalMethodSecurity(prePostEnabled=true)
¿Cómo se implementan todas estas anotaciones?La funcionalidad de extremo a extremo se utiliza con Spring AOP (objetos proxy).