The application showcases various features of Spring Boot and Thymeleaf, providing dynamic web page generation and user authentication.
The BlogApp project, developed during the course, stands as a testament to my newfound skills in Spring Boot and Thymeleaf. Some of its highlights include:
- User-friendly blog application interface using Bootstrap CSS and Thymeleaf MVC.
- Implementation of two roles, ROLE_ADMIN and ROLE_GUEST, to manage posts and comments.
- Configuring a Many-to-Many relationship between USERS and ROLES using a joining table (user_roles).
- Establishing a one-to-many relationship between posts and comments for user interaction.
- Integration of CKEditor 5 for multimedia-rich content creation.
- Utilization of @Validation for form handling, ensuring data input adheres to specified rules and constraints for a more robust and secure application.
- Enabling secure user authentication and authorization using Spring Security, granting access to specific endpoints based on user roles.
![image](https://private-user-images.githubusercontent.com/96279045/255679868-2a7dc231-d4c9-4751-bcac-a43a3fab75b4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2Nzk4NjgtMmE3ZGMyMzEtZDRjOS00NzUxLWJjYWMtYTQzYTNmYWI3NWI0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA4ODAxYzJlMzNmOGI4YmYxMWNiMzNjYTE2YWZlZWZjMjliNDYyNGJlMDA0ZjgwYjEwZGY4MDNkYmNmNmFmYmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._2C1OhkcRLCvbdKdr3-trJ9JGchy8iiVsUf7PD2y2_0)
![image](https://private-user-images.githubusercontent.com/96279045/255683299-3acee9fb-57a0-4508-a9ed-28c9b50948f4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODMyOTktM2FjZWU5ZmItNTdhMC00NTA4LWE5ZWQtMjhjOWI1MDk0OGY0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg1ZjY2OTA1ZjBkNzM5MWNmZWUxY2M0Y2U2NWM2NTlhYzBlMzhiNzFlYjBjMjI1Y2ZkNThkMDI0YjA5YmQ0ZDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Lg4vT3dMNvOOFSI7F-m0_Bl_N_th7BxX1h9a-5pXW9M)
Note: The ROLE_ADMIN user has the access to delete/update/view any ROLE_GUEST users comments and posts.
![image](https://private-user-images.githubusercontent.com/96279045/255684106-ec2b3d40-e209-4d47-b3e4-a1a1574d783e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODQxMDYtZWMyYjNkNDAtZTIwOS00ZDQ3LWIzZTQtYTFhMTU3NGQ3ODNlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU5MDY4YmJlMTYwN2Q0NzUzYTk3NjJjN2U1MjQ0ZGE4NjFhNTQwNWM3NmZjYWJiNmUyM2U4M2IwOGQ1NTdkOWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.f4kwn0P9Vu3oHmZ48Py0vF6luojWnSfxEG-o--wakP8)
![image](https://private-user-images.githubusercontent.com/96279045/255684789-7b1c8a7b-b447-496e-8356-7864a7f7b6b7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODQ3ODktN2IxYzhhN2ItYjQ0Ny00OTZlLTgzNTYtNzg2NGE3ZjdiNmI3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdhYjM1MGY2ODkyMWJlYThkNzAxOGVhNmJhMjU1MmQwZjE5NmY1OTljNzQxOTY5N2M1NmQ3ZWVkOTI4NGQ1OTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.geVnR18wfHpglGl258O6HvJWaMceyVE90F6vZPRXP4A)
![image](https://private-user-images.githubusercontent.com/96279045/255684922-41c12706-b84c-4a11-8843-70d33cc2316c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODQ5MjItNDFjMTI3MDYtYjg0Yy00YTExLTg4NDMtNzBkMzNjYzIzMTZjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZjNmY2NzMxNjY5MzM2NGIyZGJkNWY1MThlOTI5MjI2YmU4OTU0MjZhYTE2Y2Q0M2Q1OTliMTlkMWE4YzIyZjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Il9h_SyIlmwntawApnSpvWb1HtZmXOBcZD3dNfC1c_E)
![image 1](https://private-user-images.githubusercontent.com/96279045/255682147-242d5e2d-652a-4f21-b810-49e9a0149063.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODIxNDctMjQyZDVlMmQtNjUyYS00ZjIxLWI4MTAtNDllOWEwMTQ5MDYzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRjYjQzZjdhOGQ0N2FmZjM3Y2Q3OWQ2ZjBiYTM1ZTRjNWE5ZjM0M2E0MzgxNWIzZWNhYzgxNTM5ZDM0OTZjNzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.K10IYNhAPL6hV3EeMwN3z2lXvnJHvWN5hRNpUGMaMAo)
![image 2](https://private-user-images.githubusercontent.com/96279045/255682416-13a464af-364f-45f6-b3e1-422d43960cd9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODI0MTYtMTNhNDY0YWYtMzY0Zi00NWY2LWIzZTEtNDIyZDQzOTYwY2Q5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE3N2Y2ZjFhNjZkOGQ4MGE3NDc2ZWYzNTYzZDJiYjliNjQ1MTg3Y2E1MDFkOWY0ZDJmZjE0ZWZiM2FkNzgzNzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ioA5UMHpQ-V_zGiZJm_goz3l6YTko0LenfKIzGCslPI)
![image](https://private-user-images.githubusercontent.com/96279045/255685637-bb10d1f1-4cfb-4e93-8489-d0eab6a625df.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODU2MzctYmIxMGQxZjEtNGNmYi00ZTkzLTg0ODktZDBlYWI2YTYyNWRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFmZTQ2ZTI4YzNjMzBiNzgwZTFhYTAyNjk3NDdmMGFmMWI1NDUwODg3NWE5YzkxYzg0MTY0YzA2ZDRjMjljZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.hpZ19_1PDZKrshCO2HpCHlCV0sY-J12Ad3OiglP_5-A)
![image](https://private-user-images.githubusercontent.com/96279045/255679054-52b03464-0111-4d3b-8c81-4c3f92fa0d3c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2NzkwNTQtNTJiMDM0NjQtMDExMS00ZDNiLThjODEtNGMzZjkyZmEwZDNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI5MTQ5ZDI2MTIwNjgzMjhiYjRlZjRmMzMyZGU4NTEzNzcwZWNmNzdlNTA3Y2VmZGM5ZTI5MGQ1YjE5MGVhZmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zcqWW_prQwL-iq2_lFn7NqDxkiVXVB0wAN8JofcAUOY)
![image](https://private-user-images.githubusercontent.com/96279045/255679522-f457432a-64a8-4c52-b957-bf68038811ef.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2Nzk1MjItZjQ1NzQzMmEtNjRhOC00YzUyLWI5NTctYmY2ODAzODgxMWVmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNhYjkzMzVjODQ5MWIwMDM0NDE1OTY0NWVlZTYyZGY0Njg4NDZmMGI3YjE0NjE4YmFlMjAwMzk2M2MwYTIwZDYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Kh3-CLDvSf_N7-uUybdTKFJh_65lCam2qvNPuw9efVs)
![image](https://private-user-images.githubusercontent.com/96279045/255686154-78a4a90b-1c94-4d7b-bb88-cc0ae36596e6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODYxNTQtNzhhNGE5MGItMWM5NC00ZDdiLWJiODgtY2MwYWUzNjU5NmU2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTliYjllYWRhNGQ0YTkwMGJkZTA3NDM4MDZlZDFmZWZhNTQwYzQ0NTQ5OGQzMGM3NTcyZGRhZjc2OGYxYTYxZDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.bY52Tm7eQgDqCqUknC7ZIV7Jr105l4YgQRwJ1CkdmYU)
![image](https://private-user-images.githubusercontent.com/96279045/255687136-ad46f838-e18f-49ea-ad31-dbd6ef393f20.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzI1MTQsIm5iZiI6MTczOTU3MjIxNCwicGF0aCI6Ii85NjI3OTA0NS8yNTU2ODcxMzYtYWQ0NmY4MzgtZTE4Zi00OWVhLWFkMzEtZGJkNmVmMzkzZjIwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIyMzAxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyYzFhMTU0N2Q0MDkzMGE4MTc2YzgwZDk1YmE4NzhiZmUwZjk1OTBjMmNmMmFiYzIxNWUxMGE2MDJhYzdmMjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.dPfL24-UEzaN0PKWHBqChh-fVuWy7ndchw47TFjqgTQ)