스프링 MVC 인증 구현

Last updated

Last updated
@Data
public class LoginRequest {
private String username;
private String password;
}@RestController
@RequiredArgsConstructor
public class LoginController {
private final AuthenticationManager authenticationManager;
private final HttpSessionSecurityContextRepository securityContextRepository = new HttpSessionSecurityContextRepository();
@PostMapping("/login")
public Authentication login(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
UsernamePasswordAuthenticationToken token =
UsernamePasswordAuthenticationToken.unauthenticated(loginRequest.getUsername(), loginRequest.getPassword());
Authentication authentication = authenticationManager.authenticate(token);
SecurityContext securityContext = SecurityContextHolder.getContextHolderStrategy().createEmptyContext();
securityContext.setAuthentication(authentication);
SecurityContextHolder.getContextHolderStrategy().setContext(securityContext);
securityContextRepository.saveContext(securityContext, request, response);
return authentication;
}
}@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login").permitAll()
.anyRequest().authenticated())
// .formLogin(Customizer.withDefaults())
.csrf(AbstractHttpConfigurer::disable)
;
return http.build();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
return configuration.getAuthenticationManager();
}
}