[英]How to get User from database for login with Spring Boot and Spring Data Jpa
我想用我自己的數據庫中的數據制作登錄表單。 我創建了實體用戶 class:
@Entity
@Table(name = "Auth_data")
public class User {
@Id
@GeneratedValue
@Getter @Setter
private Long id;
@Column(name= "username")
@Getter @Setter
private String username;
@Column(name="password")
@Getter @Setter
private String password;
@Enumerated(EnumType.ORDINAL)
@Column(name="role")
@Getter @Setter
private Role role;
@Column(name = "client_ID")
@Getter @Setter
private Long clientID;
@Column(name = "instructor_ID")
@Getter @Setter
private Long instructorID;
public User() {}
public User(String username, String password, Role role, Long clientID, Long instructorID) {
this.username = username;
this.password = password;
this.role = role;
this.clientID = clientID;
this.instructorID = instructorID;
}
}
我還制作了實現 UserDetailsService 的 UserDetailsServiceIml class:
@Service
public class UserDetailsServiceIml implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
final User user = userRepository.findByUsername(username);
if(user == null) {
throw new UsernameNotFoundException(username);
}
Set<GrantedAuthority> grantedAuthorities = new HashSet< >();
grantedAuthorities.add(new SimpleGrantedAuthority(user.getRole().name()));
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(),
grantedAuthorities);
}
}
我的用戶存儲庫 class:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
我也嘗試過這樣的查詢:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("Select u from User u WHERE u.username=:username")
User findByUsername(@Param("username") String username);
}
但是當我在登錄表單中輸入登錄名和密碼時出現錯誤,因為在數據庫中搜索后用戶是 Null。 我該如何解決?
更新:已解決。 我不知道為什么以及如何,我發現 hibernate 創建了新表“auth_data”。 但沒有使用我的表“Auth_data”,所以,我將“Auth_data”重命名為“auth_data”,現在它可以工作了; 我還在“用戶 findByUsername(String username);”上的用戶存儲庫中更改了 @Data.changed 上的 @Getter @Setter 並將字段角色的類型從枚舉更改為字符串。
您可能沒有使用您嘗試登錄的用戶為數據庫播種。 如果用戶在數據庫中不存在,您可以使用 Application Runner class 在每次啟動時為其播種。 此外,您可以在 class 級別應用來自 Lombok 的@Data
注釋來為所有字段生成 getter 和 setter。
package com.javahowtos.dataseeddemo.dataseed;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import com.javahowtos.dataseeddemo.model.User;
import com.javahowtos.dataseeddemo.repository.UserRepository;
@Component
public class UserDataLoader implements CommandLineRunner {
@Autowired
UserRepository userRepository;
@Override
public void run(String... args) throws Exception {
loadUserData();
}
private void loadUserData() {
if (userRepository.count() == 0) {
User user1 = new User("John", "Doe");
User user2 = new User("John", "Cook");
userRepository.save(user1);
userRepository.save(user2);
}
System.out.println(userRepository.count());
}
}
來源: https://javahowtos.com/guides/107-spring/376-how-to-seed-the-database-in-spring-boot-project.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.