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 AuthenticationManagerpara verificação
- Se for bem-sucedido, o AM retornará um objeto de Authenticationpreenchido
- 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).