Implementação de autenticação e autorização baseada em funções de segurança do Spring com Spring Boot 3.0
Olá alunos, aqui vamos saber sobre a implementação de segurança de primavera com inicialização de primavera. A segurança do Spring fornece autenticação, autorização e proteção contra ataques comuns.

Autenticação - Autenticação é como verificamos a identidade do usuário que está tentando acessar um determinado recurso, uma vez realizada a autenticação conhecemos a identidade e podemos realizar a autorização.
Autorização - Autorização significa dar permissão para acessar determinado recurso/url.
Etapas para implementar o Spring Security
Passo 1: Adicione a dependência do Spring Security no POM.XML

Passo 2: Crie uma classe de configuração, adicione métodos de autenticação e autorização.

@EnableWebSecurity fornece configuração de segurança padrão para nosso aplicativo. A segurança padrão ativa os filtros de segurança HTTP e a cadeia de filtros de segurança e aplica a autenticação básica aos nossos endpoints.
@Configuration diz ao Spring Boot para verificar a classe em busca de definições de bean e registrá-las no contexto do aplicativo.
O método authenticateProvider() é usado para armazenar todos os detalhes do usuário, como nome de usuário, senha, funções. O Spring Security contém a classe DaoAuthenticationProvider, que contém userDetailsService e passwordEncoder.passwordEncoder() é usado para criptografar a senha e a senha criptografada é armazenada no banco de dados.
O método SecutityFilterChain() é para autorizar os recursos, aqui
.requestMatchers("/products/welcome","/products/new").permitAll() é para dar acesso a todos os usuários, qualquer usuário pode acessar esses dois urls.
requestMatchers(“/products/**”).authenticated() é para dar acesso a usuários autenticados.
Etapa 3: implementar a autorização baseada em função

@PreAuthorize
A anotação é usada para especificar uma expressão que será avaliada antes que o método seja executado. Se a expressão for avaliada como verdadeira, o método é executado, caso contrário, um AccessDeniedException é lançado.
O getAllProducts()
método só pode ser executado por usuários com a ROLE_USER
função, enquanto o getProductById()
método pode ser executado por usuários com a ROLE_ADMIN
função.
Testando a implementação

Adicionado o código de amostra para testar a implementação.

Depois de fornecer as credenciais do usuário, o usuário pode acessar o endpoint do usuário
Quando o usuário tentar acessar o terminal Admin com a credencial do usuário, a página de erro será exibida

Observação: se você quiser o código github funcional desta implementação, siga-me e comente seu ID de e-mail. Vou enviar o link do código-fonte para o seu e-mail.
Parte 2: Autenticação e autorização do Spring Security com JWT
Consulte os links para outros conceitos do Spring Boot:
Tutorial de primavera AOP
Tutorial de log de inicialização do Spring
Configuração Centralizada no Spring Boot
Anotações do Hibernate mais usadas
Padrões importantes de design de microsserviços para entrevistas