In this tutorial, we will be creating a full-stack application with a login functionality using Angular 17 for the frontend and Java Spring for the backend. This project will serve as a foundation for building more complex applications with user authentication and authorization.
Before we dive into the coding part, make sure you have the following tools installed on your machine:
- Node.js and npm – for installing Angular CLI and managing frontend dependencies.
- Java Development Kit (JDK) – for compiling and running Java code.
- Spring Boot – for creating a RESTful API backend.
- IDE of your choice – I recommend using IntelliJ IDEA for Java development and Visual Studio Code for Angular development.
Now, let’s start by setting up the backend with Java Spring.
Setting up the Backend with Java Spring
-
Create a new Spring Boot project using start.spring.io. Select the following dependencies:
- Spring Web
- Spring Data JPA
- H2 Database (or any other database of your choice)
-
Generate the project and import it into your IDE.
-
Create a new Java package for your application (e.g., com.example.loginapp).
-
Inside the package, create a new Java class named "User" with the following fields:
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; // Getters and Setters }
-
Create a UserRepository interface by extending JpaRepository:
public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); }
-
Create a UserController class for handling user authentication:
@RestController @RequestMapping("/api") public class UserController { @Autowired private UserRepository userRepository; @PostMapping("/login") public ResponseEntity<User> login(@RequestBody User user) { User existingUser = userRepository.findByUsername(user.getUsername()); if (existingUser != null && existingUser.getPassword().equals(user.getPassword())) { return ResponseEntity.ok(existingUser); } else { return ResponseEntity.badRequest().build(); } } }
- Run your Spring Boot application and test the API endpoints using a tool like Postman to make sure everything is working as expected.
Setting up the Frontend with Angular 17
-
Create a new Angular project using Angular CLI:
ng new login-app
-
Install Angular Material for UI components and animations:
ng add @angular/material
-
Create a login component using Angular CLI:
ng generate component login
-
Inside the login component, create a form for user input:
<form (ngSubmit)="onSubmit()"> <mat-form-field> <input matInput placeholder="Username" [(ngModel)]="username"> </mat-form-field> <mat-form-field> <input matInput placeholder="Password" [(ngModel)]="password" type="password"> </mat-form-field> <button mat-raised-button color="primary" type="submit">Login</button> </form>
-
Implement the onSubmit method in the login component to call the backend API:
export class LoginComponent { username: string; password: string; constructor(private http: HttpClient) {} onSubmit() { this.http.post<User>('/api/login', { username: this.username, password: this.password }) .subscribe((user) => { // Handle successful login }, (error) => { // Handle login error }); } }
-
Configure HttpClientModule in your app module to enable HTTP requests:
import { HttpClientModule } from '@angular/common/http'; @NgModule({ imports: [HttpClientModule] })
-
Run your Angular application using the following command:
ng serve
- Open your browser and navigate to http://localhost:4200 to test the login functionality.
Congratulations! You have successfully created a full-stack application with login functionality using Angular 17 for the frontend and Java Spring for the backend. Feel free to customize and expand this project to suit your specific requirements. Happy coding!
⭐ Seja um membro do canal e tenha acesso à lives, vídeos e conteúdos exclusivos!
https://www.youtube.com/channel/UCpKvMmsF6QrkVr_zWaLGK-A/join
vc é fera Feh eu estou aprendendo mais com vc do que na faculdade de ADS, e a Linguagem JAVA foi a que eu escolhi para trampar 🤦 kkkkkkkkkk
Não precisa instalar o angular globalmente, basta só digitar o seguinte comando
npm init @angular (nome do projeto)
Essa gataiada no formulário me quebrou kkkk meio que tem que gravar a receita ali pra evitar o erro. Mas, top demais a aula.
FER TO USANDO SEU PROJETO PARA FAZER O DESAFIO DE UMA VAGA DE EMPREGO! OBRIGADO PELO SEU TRABALHO NO YOUTUBE
Estou com um erro que quando vou pro localhost:4200/login, não aparece nada. Só aparece quando escrevo algo no app.component.html, aí aparece tanto no localhost:4200/login quanto no localhost:4200
Oi, consegue tirar essa musica nos próximos vídeos? Ela me distrai bastaste, por mim poderia ser até sem música.
Só videos bons nesse canal, show demais
Fernanda, parabéns pelo conteudo abordado, uma pergunta a parte 2 sairá para quem ainda não é um membro também?
Excelente video, cade o back-end😭😭😭😁😁
Muito top FER, PARABÉNS. Gostaria muito que vc detalhasse mais sobre o angular, principalmente na parte que não estava dando certo a label, vc criou muito código apenas pra corriri um problema de visibilidade. Nesta parte ficou confuso pra mim… Mas muito top!!!1
Conteúdo excelente 👏👏👏
tem a parte 2 ?
Conteúdo top. Mas infelizmente não consegui avançar devido ao seguinte erro quando injeto o serviço do toast no ts. Error: Uncaught (in promise): Error: NG0203: inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`. Find more. Caso alguem puder dar um help, agradeço demais.
se eu tivesse trabalhando virava membro
não estou conseguindo utilizar o toastService, mesmo realizando o passo a passo apresentado durante a aula
Nas versões mais recentes não existe mais a pasta assets, as imagens e ícones agora são colocados na pasta public.
Olá, no minuto 53:54 você verá este código: loginForm!: FormGroup<LoginForm>; mas em nenhum momento do vídeo você consegue ver quando coloca <LoginForm>. Você poderia explicar por que o adicionou e o que seria? Obrigado.
Gostei muito vlww, só que alguns cortes que vc faz é mto rapido na hora de da pause e ver o codigo todo, ae tem que ficar voltando pra acompanhar kkk
essa parte do ControlValueAcessor a gente finge que entendeu