当前位置: 首页 > 知识库问答 >
问题:

如何利用Spring Boot和Spring Data Jpa从数据库中获取用户进行登录

申浩广
2023-03-14

我想用我自己的数据库中的数据制作登录表单。我创建了实体用户类:

@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;
    }

}
@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);
    }
}
@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);
}

UPD:解决了!我不知道为什么和怎么做。我发现hibernate创建了新表“auth_data”,但没有使用我的表“auth_data”。因此,我将“auth_data”重命名为“auth_data”,现在开始工作了!我还在@data上更改了@getter@setter,在用户存储库中更改了“User findByUsername(String username);”并将字段角色的类型从枚举更改为字符串。

共有1个答案

舒博雅
2023-03-14

您可能没有将试图登录的用户植入数据库。如果用户不存在于数据库中,则可以使用应用程序运行器类在每次启动时为其添加种子。此外,您还可以在类级别上应用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

 类似资料:
  • 问题内容: 我有这个数据库结构 我需要的是在特定日期登录的所有用户的列表,例如 我目前正在尝试通过单个SQL查询完成此操作,但是我真的不知道如何获取表中记录的所有时间的时间跨度以及如何将其连接到登录的用户。 我最大的问题是如何创建数据库中所有时间的“虚拟”表… 问题答案: 编辑 CTE的二进制增长,而不是线性增长。2 ^ 100个日期应在合理范围内。

  • 我目前正在处理一个在客户端初始化了firebase的应用程序。当用户通过 firebase 登录时,我想从 firestore 中获取用户的数据。我目前正在侦听器中执行此操作并成功获取用户。我想知道这是否是获取用户数据的最佳方式。我的代码如下: 我主要担心的是,每次刷新应用程序时都会获取用户的数据。关于此事的任何建议或最佳做法将不胜感激

  • 我正在尝试使用reverfit向Google GeoCode API发送一个请求。服务界面如下所示: 当我调用服务时: 我收到以下StackTrace: 我从这里获取了大量的代码:http://square.github.io/reverfit/所以我有点不理解这个问题。 想法?

  • 我有一个辅助项目网站,人们可以在那里评论东西,现在我需要显示用户的评论和评论者的用户名。问题是,我无法获得登录用户的用户名。 评论示例: 1) 评论人-Shelo 测试评论 2) 评论人-ProGa 测试评论2 现在的问题是,如果我试图获取“当前登录”用户的用户名,当用户登录时,两条评论都会有相同的用户名 上面的代码示例是您当前登录用户的方式。因此,如果我使用这段代码,并尝试通过

  • 我必须得到一个特定用户的用户配置文件细节后,他们登录使用Firebase。现在,它正在返回我的FireStore中所有用户的详细信息。

  • 使用liquibase和springboot,创建了数据库变更日志,并能够用maven-liquibase-plugin(mvn liquibase:update)成功地运行它。我正在编写集成测试,其中需要以编程方式创建liquibase更改。 运行上述测试时出现以下异常。 java.lang.IllegalStateException:在org.springframework.test.cont