autocomit

This commit is contained in:
2026-02-07 22:14:45 +01:00
parent 9266785fdb
commit f53e22ba87
5 changed files with 96 additions and 11 deletions
@@ -2,6 +2,8 @@ package com.ldpv2.security;
import com.ldpv2.domain.entity.User;
import com.ldpv2.repository.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@@ -14,18 +16,32 @@ import java.util.Collections;
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
private static final Logger logger = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.debug("Attempting to load user: {}", username);
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
.orElseThrow(() -> {
logger.error("User not found: {}", username);
return new UsernameNotFoundException("User not found: " + username);
});
return org.springframework.security.core.userdetails.User.builder()
logger.debug("User found: {}, role: {}", user.getUsername(), user.getRole());
logger.debug("Password hash starts with: {}", user.getPassword().substring(0, 10));
UserDetails userDetails = org.springframework.security.core.userdetails.User.builder()
.username(user.getUsername())
.password(user.getPassword())
.authorities(Collections.singletonList(new SimpleGrantedAuthority("ROLE_" + user.getRole())))
.build();
logger.debug("UserDetails created successfully for: {}", username);
return userDetails;
}
}
@@ -8,8 +8,11 @@ import com.ldpv2.dto.response.UserResponse;
import com.ldpv2.exception.BadRequestException;
import com.ldpv2.repository.UserRepository;
import com.ldpv2.security.JwtTokenProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -20,6 +23,8 @@ import org.springframework.transaction.annotation.Transactional;
@Service
public class AuthService {
private static final Logger logger = LoggerFactory.getLogger(AuthService.class);
@Autowired
private UserRepository userRepository;
@@ -34,13 +39,17 @@ public class AuthService {
@Transactional
public AuthResponse register(RegisterRequest request) {
logger.debug("Registration attempt for username: {}", request.getUsername());
// Check if username exists
if (userRepository.existsByUsername(request.getUsername())) {
logger.warn("Registration failed: Username already exists: {}", request.getUsername());
throw new BadRequestException("Username already exists");
}
// Check if email exists
if (userRepository.existsByEmail(request.getEmail())) {
logger.warn("Registration failed: Email already exists: {}", request.getEmail());
throw new BadRequestException("Email already exists");
}
@@ -52,6 +61,7 @@ public class AuthService {
user.setRole("USER");
user = userRepository.save(user);
logger.info("User registered successfully: {}", user.getUsername());
// Authenticate the user
Authentication authentication = authenticationManager.authenticate(
@@ -65,17 +75,33 @@ public class AuthService {
}
public AuthResponse login(LoginRequest request) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())
);
logger.debug("Login attempt for username: {}", request.getUsername());
try {
// This will call UserDetailsService.loadUserByUsername()
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())
);
SecurityContextHolder.getContext().setAuthentication(authentication);
String token = tokenProvider.generateToken(authentication);
logger.debug("Authentication successful for: {}", request.getUsername());
User user = userRepository.findByUsername(request.getUsername())
.orElseThrow(() -> new BadRequestException("User not found"));
SecurityContextHolder.getContext().setAuthentication(authentication);
String token = tokenProvider.generateToken(authentication);
return new AuthResponse(token, mapToUserResponse(user));
User user = userRepository.findByUsername(request.getUsername())
.orElseThrow(() -> new BadRequestException("User not found"));
logger.info("Login successful for user: {}", user.getUsername());
return new AuthResponse(token, mapToUserResponse(user));
} catch (BadCredentialsException e) {
logger.error("Login failed for username: {} - Bad credentials", request.getUsername());
throw e;
} catch (Exception e) {
logger.error("Login failed for username: {} - {}", request.getUsername(), e.getMessage());
throw e;
}
}
private UserResponse mapToUserResponse(User user) {