UserServiceImpl
package customlogin.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import customlogin.dto.UserDto;
import customlogin.model.User;
import customlogin.repositories.UserRepository;
@Service
public class UserServiceImpl implements UserService{
@Autowired
PasswordEncoder passwordEncoder;
private UserRepository userRepository;
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public User findByUsername(String username) {
return userRepository.findByUsername(username);
}
@Override
public User save(UserDto userDto) {
User user = new User(userDto.getFullname(), userDto.getDateofbirth(), userDto.getGender(), userDto.getAddress(), userDto.getCity(), userDto.getState(), userDto.getUsername(),passwordEncoder.encode(userDto.getPassword()));
return userRepository.save(user);
}
}
UserService
package customlogin.service;
import customlogin.dto.UserDto;
import customlogin.model.User;
public interface UserService {
User findByUsername(String username);
User save(UserDto userDto);
}
UserRepository
package customlogin.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import customlogin.model.User;
@Repository
public interface UserRepository extends JpaRepository<User, Long>{
User findByUsername(String username);
}
Whenever i am logging with correct username and password error appears in console that this.userRepository is null
Error:
Caused by: java.lang.NullPointerException: Cannot invoke "customlogin.repositories.UserRepository.findByUsername(String)" because "this.userRepository" is null at customlogin.service.CustomUserDetailsServices.loadUserByUsername(CustomUserDetailsServices.java:26) ~[classes/:na] at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:103) ~[spring-security-core-6.2.1.jar:6.2.1] ... 65 common frames omitted
As you mentioned, userRepository is null beacuse it is not injected.
Add @Autowired annotation or make it final and add to constructor to do that.
Better way is Constructor-based injecttion like in example below. To find out how it works and what types of dependency injection are, read https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html#beans-dependency-resolution (Constructor-based or setter-based DI?)