Guten Abend,
Ich möchte Spring Security in meine Anwedung integrieren. Leider komme ich aber gerde nicht weiter. Ich möchte den User auf eine Custom-Login Page leiten von der aus er/sie/es sich anmelden kann. Standard Prozedur. Ich komme bis zur Login Page, danach passiert aber nichts weiter, ich gebe die Benutzerdaten eines Benutzers an der in der Datenbank liegt und werde einfach direkt wieder auf die Login Seite geleitet. Das Login Template ist ein Standard Thymleaf Template. Jetzt muss ich einfach mal blöd fragen, Habe ich etwas falsch konfiguriert? Also scheinbar ja, ich komme aber leider einfach nicht darauf was. Vielleicht könnt ihr mir ja behilflich sein
}[/CODE]
}[/CODE]
Ich möchte Spring Security in meine Anwedung integrieren. Leider komme ich aber gerde nicht weiter. Ich möchte den User auf eine Custom-Login Page leiten von der aus er/sie/es sich anmelden kann. Standard Prozedur. Ich komme bis zur Login Page, danach passiert aber nichts weiter, ich gebe die Benutzerdaten eines Benutzers an der in der Datenbank liegt und werde einfach direkt wieder auf die Login Seite geleitet. Das Login Template ist ein Standard Thymleaf Template. Jetzt muss ich einfach mal blöd fragen, Habe ich etwas falsch konfiguriert? Also scheinbar ja, ich komme aber leider einfach nicht darauf was. Vielleicht könnt ihr mir ja behilflich sein
Java:
@Configuration
public class SpringSecurityConfig {
private final CustomUserDetailsService customUserDetailsService;
private final CustomAuthenticationSuccessHandler customauthhandler;
public SpringSecurityConfig(CustomUserDetailsService customUserDetailsService, CustomAuthenticationSuccessHandler customauthhandler) {
this.customUserDetailsService = customUserDetailsService;
this.customauthhandler = customauthhandler;
}
@Bean
protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(csrf -> csrf.disable()).authorizeHttpRequests((authorize) -> {
authorize.requestMatchers(publicUrl).permitAll();
authorize.requestMatchers("/api/").permitAll();
authorize.requestMatchers("/api/register/save").permitAll();
authorize.anyRequest().authenticated();
});
http.formLogin(form-> form.loginPage("/api/login").permitAll()
// .defaultSuccessUrl("/api/"));
.successHandler(customauthhandler));
return http.build();
}
@Bean
AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setPasswordEncoder(passwordEncoder());
authenticationProvider.setUserDetailsService(customUserDetailsService);
return authenticationProvider;
}
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Service
public class CustomUserDetailsService implements UserDetailsService {
private UserRepository userRepository;
public CustomUserDetailsService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByEmail(username);
if(user == null) {
throw new UsernameNotFoundException("user not found");
}
return new CustomUserDetails(user);
}
@Component
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
if(userDetails == null) {
System.out.println("kein User gefunden");
}
String username = userDetails.getUsername();
System.out.println(username);
boolean hasjobSeekerRole = authentication.getAuthorities().stream().anyMatch(r->r.getAuthority().equals("ADMIN"));
boolean hasRecruiterRole = authentication.getAuthorities().stream().anyMatch(r->r.getAuthority().equals("USER"));
if(hasRecruiterRole || hasjobSeekerRole){
response.sendRedirect("/api/");
}
}
}
}[/CODE]