Passo 1: Configuração do Projeto
Crie um novo projeto Spring Boot e adicione as seguintes dependências no arquivo pom.xml
(se estiver usando o Maven):
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Starter Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
Passo 2: Configuração do Banco de Dados
Configure as propriedades de conexão com o banco de dados MySQL no arquivo application.properties
:
spring.datasource.url=jdbc:mysql://localhost:3306/db_name
spring.datasource.username=db_username
spring.datasource.password=db_password
Substitua db_name
, db_username
e db_password
pelos valores apropriados do seu ambiente.
Passo 3: Criar a Entidade do Usuário
Crie uma entidade JPA que representará o usuário no banco de dados:
@Entity
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
private String senha;
private String token;
// Construtores, getters e setters
}
Passo 4: Criar o Repositório do Usuário
Crie um repositório JPA para realizar operações no banco de dados relacionadas ao usuário:
@Repository
public interface UsuarioRepository extends JpaRepository<Usuario, Long> {
Usuario findByLogin(String login);
}
Passo 5: Criar o Serviço de Autenticação
Crie um serviço que será responsável por lidar com a autenticação e geração de tokens:
@Service
public class AuthenticationService {
@Autowired
private UsuarioRepository usuarioRepository;
public String generateToken(String login) {
// Implemente aqui a lógica para gerar o token (pode ser aleatório ou baseado no login, por exemplo)
return UUID.randomUUID().toString();
}
public boolean authenticate(String login, String senha) {
Usuario usuario = usuarioRepository.findByLogin(login);
if (usuario != null && usuario.getSenha().equals(senha)) {
String token = generateToken(login);
usuario.setToken(token);
usuarioRepository.save(usuario);
return true;
}
return false;
}
public boolean checkToken(String token) {
Usuario usuario = usuarioRepository.findByToken(token);
return usuario != null;
}
}
Passo 6: Configurar o Spring Security
Crie uma classe de configuração do Spring Security para definir as regras de autenticação e autorização:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationService authenticationService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(new CustomAuthenticationProvider(authenticationService));
}
}
Passo 7: Implementar o CustomAuthenticationProvider
Crie um provedor de autenticação personalizado para verificar as credenciais do usuário e definir a autenticação:
public class CustomAuthenticationProvider implements AuthenticationProvider {
private final AuthenticationService authenticationService;
public CustomAuthenticationProvider(AuthenticationService authenticationService) {
this.authenticationService = authenticationService;
}
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String login = authentication.getName();
String senha = authentication.getCredentials().toString();
if (authenticationService.authenticate(login, senha)) {
return new UsernamePasswordAuthenticationToken(login, senha, new ArrayList<>());
}
throw new BadCredentialsException("Credenciais inválidas.");
}
@Override
public boolean supports(Class<?> authentication) {
return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);
}
}
Passo 8: Implementar as Páginas de Login e Acesso Restrito
Crie páginas para a autenticação do usuário e páginas de acesso restrito. Por exemplo, crie um controlador para exibir a página de login e a página após o login com token:
@Controller
public class AuthController {
@GetMapping("/login")
public String loginPage() {
return "login";
}
@GetMapping("/home")
public String homePage() {
return "home";
}
}
Lembre-se de criar as respectivas páginas HTML para "login" e "home".
Passo 9: Implementar as Rotas Protegidas
Para proteger as páginas de acesso restrito, você pode configurar o Spring Security para exigir autenticação para determinadas rotas. Você pode fazer isso no método configure(HttpSecurity http)
da classe SecurityConfig
. Por exemplo:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll()
.antMatchers("/home").authenticated()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login");
}
Dessa forma, somente os usuários autenticados (com token válido) poderão acessar a rota /home
e outras rotas não configuradas explicitamente.
Passo 10: Implementar o Controller para o Login
Crie um controlador para processar a requisição de login e realizar a autenticação:
@Controller
public class AuthController {
@Autowired
private AuthenticationService authenticationService;
@PostMapping("/login")
public String login(@RequestParam String login, @RequestParam String senha) {
if (authenticationService.authenticate(login, senha)) {
return "redirect:/home";
} else {
return "login";
}
}
}
Top comments (0)