Estou implementando o spring security com duas roles, medico e paciente, porem n estou conseguindo logar com o medico pois da esse erro
java.lang.StackOverflowError: null
at java.base/java.lang.Exception.<init>(Exception.java:103) ~[na:na]
at java.base/java.lang.ReflectiveOperationException.<init>(ReflectiveOperationException.java:90) ~[na:na]
at java.base/java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:67) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.10.jar:6.0.10]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:237) ~[spring-aop-6.0.10.jar:6.0.10]
at jdk.proxy2/jdk.proxy2.$Proxy114.authenticate(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
2023-07-27T12:16:55.654-03:00 INFO 1312 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2023-07-27T12:16:55.657-03:00 INFO 1312 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2023-07-27T12:16:55.662-03:00 INFO 1312 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
Process finished with exit code 130
A minha classe do AuthenticationController esta assim:
package com.system.care.health.HealthAndCareSystem.controllers;
import com.system.care.health.HealthAndCareSystem.dtos.AuthenticationDTO;
import com.system.care.health.HealthAndCareSystem.dtos.doctor.DoctorRegisterDTO;
import com.system.care.health.HealthAndCareSystem.models.DoctorModel;
import com.system.care.health.HealthAndCareSystem.repositories.DoctorRepository;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("auth")
public class AuthenticationController {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
DoctorRepository repository;
@PostMapping("/login")
public ResponseEntity login(@RequestBody @Valid AuthenticationDTO data){
var usernamePassword = new UsernamePasswordAuthenticationToken(data.getCrm(), data.getPassword());
var auth = this.authenticationManager.authenticate(usernamePassword);
return ResponseEntity.ok().build();
}
@PostMapping("/register")
public ResponseEntity register(@RequestBody @Valid DoctorRegisterDTO data){
if (this.repository.findByCrm(data.getCrm()) != null) return ResponseEntity.badRequest().build();
String encryotedPassword = new BCryptPasswordEncoder().encode(data.getPassword());
DoctorModel newDoctor = new DoctorModel(data.getCrm(), encryotedPassword, data.getRole());
this.repository.save(newDoctor);
return ResponseEntity.ok().build();
}
}