Пружинная загрузка: круговая зависимость между аутентификацией консервации, пользовательской сети и контроллераJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Пружинная загрузка: круговая зависимость между аутентификацией консервации, пользовательской сети и контроллера

Сообщение Anonymous »

Я разрабатываю микросервис Spring Boot 3.x с использованием Java 21 и шестиугольной архитектуры. Тем не менее, мое приложение не может запустить из -за круговой зависимости, включающей аутентификацию serviceImpl, userRepositoryImpl и аутентификацию.Error starting ApplicationContext. The dependencies of some of the beans in the application context form a cycle:

authenticationController defined in file [.../AuthenticationController.class]

authenticationServiceImpl defined in file [.../AuthenticationServiceImpl.class]
┌─────┐
| userRepositoryImpl defined in file [.../UserRepositoryImpl.class]
└─────┘
< /code>
Структура проекта: < /p>
📂 auth-service/
├── application/
│ ├── service/
│ │ ├── AuthenticationServiceImpl.java
| | ├── JwtService.java

├── domain/
│ ├── model/
│ │ ├── User.java
| | ├── Role.java

├── ports/
│ ├── AuthenticationServicePort.java
│ ├── UserRepositoryPort.java
│ ├── TokenPort.java

├── adapters/
│ ├── inbound/
│ │ ├── controller/
│ │ │ ├── AuthenticationController.java
│ ├── outbound/
│ │ ├── repository/
│ │ │ ├── RoleEntity.java
│ │ │ ├── UserEntity.java
│ │ │ ├── UserRepositoryImpl.java
│ │ │ ├── UserRepository.java
│ │ ├── security/
│ │ │ ├── UserDetailsAdapter.java

├── config/
│ ├── ApplicationConfig.java
├── utils/
│ ├── Mapper.java
< /code>
контроллер: < /p>
@RestController
@RequestMapping("/api/v1/auth")
public class AuthenticationController {
private final AuthenticationServicePort authenticationServicePort;

public AuthenticationController(AuthenticationServicePort authenticationServicePort) {
this.authenticationServicePort = authenticationServicePort;
}

@PostMapping("/register")
public ResponseEntity register(
@Valid @RequestBody RegisterRequestDto request
) {
return ResponseEntity.ok(authenticationServicePort.register(request));
}

@PostMapping("/login")
public ResponseEntity authenticate(
@RequestBody AuthenticationRequestDto request
) {
return ResponseEntity.ok(authenticationServicePort.authenticate(request));
}
}
< /code>
service < /p>
@Service
public class AuthenticationServiceImpl implements AuthenticationServicePort {
private final UserRepositoryPort userRepositoryPort;
private final PasswordEncoder passwordEncoder;
private final TokenPort tokenPort;
private final AuthenticationManager authenticationManager;

public AuthenticationServiceImpl(UserRepositoryPort userRepositoryPort, PasswordEncoder passwordEncoder, TokenPort tokenPort, AuthenticationManager authenticationManager) {
this.userRepositoryPort = userRepositoryPort;
this.passwordEncoder = passwordEncoder;
this.tokenPort = tokenPort;
this.authenticationManager = authenticationManager;
}

@Override
public AuthenticationResponseDto register(RegisterRequestDto request) {
User user = new User(
null,
request.getFirstname(),
request.getLastname(),
request.getEmail(),
passwordEncoder.encode(request.getPassword()),
Role.USER,
null, null,
request.getPhoneNumber(),
null, null
);

userRepositoryPort.save(user);

Map extraClaims = new HashMap();
extraClaims.put("ROLE", Role.USER);
String jwtToken = tokenPort.generateToken(extraClaims, new UserDetailsAdapter(user));

return new AuthenticationResponseDto(jwtToken);
}

@Override
public AuthenticationResponseDto authenticate(AuthenticationRequestDto request) {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
request.getEmail(),
request.getPassword()
)
);

User user = userRepositoryPort.findByEmail(request.getEmail())
.orElseThrow();

Map extraClaims = new HashMap();
extraClaims.put("ROLE", user.getRole());

String jwtToken = tokenPort.generateToken(extraClaims, new UserDetailsAdapter(user));
return new AuthenticationResponseDto(jwtToken);
}
}
< /code>
userRepositoryImpl < /p>
@Repository
public class UserRepositoryImpl implements UserRepositoryPort {

private final UserRepository userRepository;

public UserRepositoryImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}

@Override
public Optional findByEmail(String email) {
return userRepository.findByEmail(email).map(Mapper::toDomain);
}

@Override
public User save(User user) {
UserEntity entity = toEntity(user);
return toDomain(userRepository.save(entity));
< /code>
userRepository < /p>
public interface UserRepository extends JpaRepository {
Optional findByEmail(String email);
}
< /code>
userRepositoryport: < /p>
public interface UserRepositoryPort {
Optional findByEmail(String email);
User save(User user);
}
< /code>
Что я попробовал
удалить @repository из userRepositoryImpl и вводил его вручную в приложении.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... repository
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»