Este artigo é uma tradução do artigo Spring Professional Certification Prep .
Ele abordará o tópico Spring Security e as principais perguntas sobre ele.
Também pode ser usado para se preparar para uma entrevista.
↓ Outros artigos estão disponíveis nos links do índice ↓

Perguntas em si:
O que é autenticação e autorização?Autenticação é o processo de verificação do usuário de um sistema de computador.
É assim que acontece na primavera:
- A senha e o nome de usuário resultantes são convertidos em uma instância de UsernamePasswordAuthenticationToken . Ele implementa a interface de autenticação .
- O token é passado para o objeto
AuthenticationManager
para verificação - Se for bem-sucedido, o AM retornará um objeto de
Authentication
preenchido - O contexto de segurança é definido chamando
SecurityContextHolder.getContext().setAuthentication(...)
Autorização é o processo de verificar se o usuário tem a função necessária para executar uma ação. Durante a autorização, é verificado se você possui os direitos apropriados para acessar o recurso.
Processo:
- Pelo principal (principal) do usuário, sua função é exibida
- Função de usuário verificada em relação à função de recurso
Primeiro, a autenticação ocorre e depois a autenticação.
Como a segurança trabalha internamente?Usando proxies Spring AOP que herdam da classe AbstractSecurityInterceptor.
É usado para métodos que chamam de autorização.
A infraestrutura da Web de segurança é baseada em filtros de servlet.
A primeira etapa é configurar o filtro DelegatingFilterProxy
. Ele delega a solicitação no FilterChainProxy
.
FilterChainProxy
é um bean que aceita um ou mais SecurityFilterChain
no construtor.
SeccurityFilterChain
compara o URL na solicitação com uma lista de filtros.

Principais recursos envolvidos na segurança da primaveraSecurityContextHolder
- contém e fornece acesso ao SecurityContext no aplicativo.
SecurityContext
- a implementação padrão do Spring Security que contém o objeto de autenticação.
Authentication
- fornece um token para uma solicitação de autenticação ou para um principal que se autenticou. Ele também contém uma lista de poderes aos quais o principal tem acesso.
GrantedAuthority
- Contém a autoridade concedida ao principal GrantedAuthority
.
UserDetails
- contém informações sobre o usuário: senha, login, permissões. Essas informações são usadas para criar um objeto de autenticação após uma autenticação bem-sucedida.
UserDetailsService
- este serviço extrai informações sobre o usuário do repositório (memória do programa, banco de dados, etc.) e as coloca em UserDetails.
O que é um filtro de proxy delegado?A classe DelegatingFilterProxy
é uma classe que implementa a interface javax.Servlet.Filter
.
Este é um filtro especial que delega o trabalho para outros beans, que também são filtros.
O que é a cadeia de filtros de segurança?A cadeia de filtros implementa a interface SecurityFilterChain
. A implementação fornecida pelo Spring Security é DefaultSecurityFilterChain.
O construtor DSFC aceita vários parâmetros. O primeiro parâmetro é o solicitador de correspondência. Os parâmetros restantes são filtros que implementam a interface servlet.Filter. Aqui estão todos os filtros aceitos pelo DSFC:
ChannelProcessingFilter
SecurityContextPersistenceFilter
ConcurrentSessionFilter
- Qualquer autenticação. filter:
UserNamePasswordAuthenticationFilter
/ CasAythenticationFilter
/ BasicAuthenticationFilter
SecurityContextHolderAwareRequestFilter
JaasApiIntegrationFilter
RemeberMeAuthenticationFilter
AnonymusAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
O que é um contexto de segurança?O objeto principal é um SecurityContextHolder
. É o local em que os detalhes sobre o contexto de segurança atual são armazenados, por exemplo, detalhes do principal que está usando o aplicativo no momento. Por padrão, o ThreadLocal
usado para armazenamento.
O objeto retornado pelo método getContext()
é SecurityContext
. Permite receber e configurar um objeto de Authentication
.
Authentication
representa as seguintes propriedades:
- A cobrança de poderes concedidos ao principal
- Dados para identificação do usuário (login, senha)
- Detalhes - adicionar. informações, se necessário. Pode ser nulo
- Principal
- Sinalizador de autenticação - variável booleana que indica se o principal passou no teste com sucesso
Como definir uma interceptação de cliques do usuário em URLs específicos? @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()
O que * significa nos métodos antMatchers e mvcMatchers ()?Esta expressão significa "qualquer".
Existem 2 tipos:
*
- intercepta apenas no nível em que é usado.
Por exemplo, o padrão "/ orders / *" verifica os direitos do usuário se o usuário seguir
/ orders / aliens ou / orders / 1, mas não / orders / alien / 1.
**
- intercepta em todos os níveis.
Quaisquer pedidos serão verificados, / orders / aliens, / orders / 1, / orders / alien / 1.
Por que o mvcMatcher é mais seguro que o antMatcher?Como o antMatcher(“/service”)
mapeia o caminho da solicitação apenas para “/service”
, enquanto o mvcMatcher(“/service”)
mapeia para “/service”
, “/service.html”
, “/service.abc” .
O Spring suporta hash de senha? O que é sal?Sim sim. Existe uma interface PasswordEncoder
para hash, que contém apenas um método:
static PasswordEncoder createDelegatingPasswordEncoder()
, que retorna o padrão DelegatePasswordEncoder
.
Salt é usado para calcular o valor do hash da senha. Essa é uma sequência de números aleatórios usados para converter uma senha de texto em um hash. O salt é armazenado de forma clara ao lado da senha de hash e pode ser usado posteriormente ao converter uma senha limpa em um hash com um novo login de usuário.
Por que você precisa de proteção para métodos? Como instalá-lo?O Spring Security suporta a proteção de métodos individuais em beans (por exemplo, em controladores). Essa é uma camada adicional de proteção para o aplicativo.
Ele deve ser especificado explicitamente usando a anotação @EnableGlobalMethodSecurity
.
O que a anotação @RolesAllowed faz?Esta anotação é baseada no JSR-250.
@RolesAllowed
permite configurar o acesso aos métodos (por exemplo, na classe do controlador) usando funções.
Exemplo: @RolesAllowed(“ADMIN”)
permitirá apenas usuários com a função ADMIN
Para usar, você precisa definir @EnableGlobalMethodSecurity(jsr250Enabled=true)
na classe @Configuration + você precisa que esta anotação esteja no caminho de classe.
Conte-nos sobre @PreAuthorize@PreAuthorize
permite configurar o acesso ao método usando o SpEL.
Para usar, você precisa definir @EnableGlobalMethodSecurity(prePostEnabled=true)
Como todas essas anotações são implementadas?A funcionalidade de ponta a ponta é usada usando o Spring AOP (objetos proxy).