54 lines
2.2 KiB
Java
54 lines
2.2 KiB
Java
package com.faf223.expensetrackerfaf.config;
|
|
|
|
import com.faf223.expensetrackerfaf.repository.CredentialRepository;
|
|
import com.faf223.expensetrackerfaf.repository.UserRepository;
|
|
import com.faf223.expensetrackerfaf.security.PersonDetails;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Primary;
|
|
import org.springframework.security.authentication.AuthenticationManager;
|
|
import org.springframework.security.authentication.AuthenticationProvider;
|
|
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
|
|
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
|
@Configuration
|
|
@RequiredArgsConstructor
|
|
public class ApplicationConfig {
|
|
|
|
private final CredentialRepository credentialRepository;
|
|
|
|
@Bean
|
|
public UserDetailsService userDetailsService() {
|
|
return username -> new PersonDetails(credentialRepository.findByEmail(username).orElseThrow(() -> new UsernameNotFoundException("User not found")));
|
|
}
|
|
|
|
@Bean
|
|
public AuthenticationProvider authenticationProvider() {
|
|
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
|
|
authProvider.setUserDetailsService(userDetailsService());
|
|
authProvider.setPasswordEncoder(passwordEncoder());
|
|
return authProvider;
|
|
}
|
|
|
|
@Bean
|
|
public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
|
|
return config.getAuthenticationManager();
|
|
}
|
|
|
|
@Bean
|
|
public PasswordEncoder passwordEncoder() {
|
|
return new BCryptPasswordEncoder();
|
|
}
|
|
@Bean
|
|
@Primary
|
|
public JwtAuthenticationFilter customJwtAuthenticationFilter(JwtService jwtService, UserDetailsService userDetailsService) {
|
|
return new JwtAuthenticationFilter(jwtService, userDetailsService);
|
|
}
|
|
|
|
}
|