diff --git a/pom.xml b/pom.xml index 014a09e..d17c193 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,10 @@ spring-rabbit-test test + + org.springframework.boot + spring-boot-starter-security + org.testcontainers junit-jupiter diff --git a/src/main/java/com/stktrk/app/BasicConfiguration.java b/src/main/java/com/stktrk/app/BasicConfiguration.java new file mode 100644 index 0000000..514dd99 --- /dev/null +++ b/src/main/java/com/stktrk/app/BasicConfiguration.java @@ -0,0 +1,51 @@ +package com.stktrk.app; + +import jakarta.annotation.Nonnull; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; + +/** + * Code was copied from here + */ +@Configuration +@EnableWebSecurity +public class BasicConfiguration { + + @Bean + @Nonnull + public InMemoryUserDetailsManager userDetailsService(@Nonnull PasswordEncoder passwordEncoder) { + UserDetails user = User.withUsername("Rasmus") + .password(passwordEncoder.encode("password")) + .roles("USER") + .build(); + UserDetails admin = User.withUsername("Christian") + .password(passwordEncoder.encode("password")) + .roles("USER", "ADMIN") + .build(); + return new InMemoryUserDetailsManager(user, admin); + } + + @Bean + @Nonnull + public SecurityFilterChain filterChain(@Nonnull HttpSecurity http) throws Exception { + return http.authorizeHttpRequests(request -> request.anyRequest() + .authenticated()) + .httpBasic(Customizer.withDefaults()) + .build(); + } + + @Bean + @Nonnull + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } +} \ No newline at end of file diff --git a/src/main/java/com/stktrk/app/application/profile/ProfileController.java b/src/main/java/com/stktrk/app/application/profile/ProfileController.java index 907215a..bab7ba3 100644 --- a/src/main/java/com/stktrk/app/application/profile/ProfileController.java +++ b/src/main/java/com/stktrk/app/application/profile/ProfileController.java @@ -9,10 +9,14 @@ import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.annotation.Secured; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.Authentication; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.*; +import javax.annotation.security.RolesAllowed; import java.security.InvalidKeyException; import java.util.HashMap; import java.util.List; @@ -27,11 +31,10 @@ public class ProfileController { @Nonnull private final ProfileService profileService; - // TODO figure out how to handle the exception. @Nonnull @GetMapping("/") - public List findAll() { + public List findAll(@Nonnull Authentication authentication) { return profileService.findAll(); } @@ -57,7 +60,6 @@ public class ProfileController { .body("Created Profile"); } - @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MethodArgumentNotValidException.class) @Nonnull