/
Chebarik
/
PackageManagement
Обзор
Документация
Войти
/
Chebarik
/
PackageManagement
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/packagemanagement/application/service/AuthenticationService.java
75 строк
3 KB
Николай Мехоношин
Implemented non functional requirements
14 апр 2026, 18:37
14 апр 2026, 18:37
2e86838
Код
Авторство
О чём код?
package com.packagemanagement.application.service; import com.packagemanagement.application.port.AuditService; import com.packagemanagement.domain.model.User; import com.packagemanagement.domain.model.UserRole; import com.packagemanagement.domain.repository.UserRepository; import com.packagemanagement.infrastructure.security.JwtTokenProvider; import com.packagemanagement.presentation.response.TokenResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service public class AuthenticationService { private static final Logger log = LoggerFactory.getLogger(AuthenticationService.class); private final UserRepository userRepository; private final JwtTokenProvider jwtTokenProvider; private final PasswordEncoder passwordEncoder; private final AuditService auditService; public AuthenticationService(UserRepository userRepository, JwtTokenProvider jwtTokenProvider, PasswordEncoder passwordEncoder, AuditService auditService) { this.userRepository = userRepository; this.jwtTokenProvider = jwtTokenProvider; this.passwordEncoder = passwordEncoder; this.auditService = auditService; } public TokenResponse authenticate(String username, String password, String clientIp) { User user = userRepository.findByUsername(username) .orElseThrow(() -> { auditService.logSecurityEvent("LOGIN_FAILURE", username, clientIp, "User not found"); return new BadCredentialsException("Invalid username or password"); }); if (!passwordEncoder.matches(password, user.getPasswordHash())) { auditService.logSecurityEvent("LOGIN_FAILURE", username, clientIp, "Invalid password"); throw new BadCredentialsException("Invalid username or password"); } String token = jwtTokenProvider.generateToken(user); long expiresIn = jwtTokenProvider.getAccessTokenExpiration(); auditService.logSecurityEvent("LOGIN_SUCCESS", username, clientIp, ""); log.info("User '{}' authenticated successfully", username); return new TokenResponse(token, "Bearer", expiresIn); } public TokenResponse register(String username, String password, String email, String clientIp) { if (userRepository.existsByUsername(username)) { throw new IllegalArgumentException("Username '" + username + "' is already taken"); } String hashedPassword = passwordEncoder.encode(password); User user = User.create(username, hashedPassword, email, UserRole.READER); userRepository.save(user); String token = jwtTokenProvider.generateToken(user); long expiresIn = jwtTokenProvider.getAccessTokenExpiration(); auditService.logSecurityEvent("REGISTRATION", username, clientIp, "role=" + user.getRole()); log.info("User '{}' registered with role {}", username, user.getRole()); return new TokenResponse(token, "Bearer", expiresIn); } }