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

使用spring boot rest api的mysql身份验证问题

微生善
2023-03-14

我有一个通过spring boot rest API与mysql的身份验证问题。我想使用“Save user”方法从服务中创建一个用户,并访问这个用户信息和rest API。在不使用任何mvc结构(html、js、css等)的情况下,我希望使用服务创建一个用户,并与该用户一起登录以RestAPI。我在下面提到了项目的所有单元。如果你帮忙,我将不胜感激。

用户

@Data
@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int id;
    @Column(name = "email")
    @Email
    @NotEmpty
    private String email;
    @Column(name = "password")
    @Length(min = 5)
    @NotEmpty
    private String password;
    @Column(name = "name")
    @NotEmpty
    private String name;
    @Column(name = "last_name")
    @NotEmpty
    private String lastName;
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

    //G&S
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public Set<Role> getRoles() {
        return roles;
    }
    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

}
@Data
@Entity
@Table(name = "role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "role_id")
    private int id;
    @Column(name = "role")
    private String role;

    //G&S
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }

}
public interface UserRepository extends JpaRepository<User, Integer>{
    User findByEmail(String email);
    List<User> findByName(String name);
    List<User> findByLastName(String lastName);
}
public interface RoleRepository extends JpaRepository<Role, Integer>{
    Role findByRole(String role);
}
@org.springframework.stereotype.Service
public class UserService {
    @Autowired
    UserRepository userRepository;
    @Autowired
    RoleRepository roleRepository;

    @Autowired
    public UserService(UserRepository userRepository,
                       RoleRepository roleRepository) {

        this.userRepository = userRepository;
        this.roleRepository = roleRepository;
    }

    //CREATE USER
    public User saveUser(User user) {
        user.setPassword("mutlu1234");
        Role userRole = roleRepository.findByRole("ADMIN");
        user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
        return userRepository.save(user);
    }

}
@Controller
public class MainController {

    @Autowired
    UserService userService;


    @RequestMapping(value="/", method = RequestMethod.GET)
    public String createUser() {

        User mutlu = new User();
        userService.saveUser(mutlu);

        return "Created";
    }

    @RequestMapping(value = "/private/{accountNumber}")
    public String getPrivateAccountData(@PathVariable final int accountNumber){
        return "Private account lined:"+accountNumber;
    } 

}
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure(HttpSecurity httpSecurity) throws Exception{
        httpSecurity.authorizeRequests().antMatchers("/private/*").hasRole("ADMIN").and().formLogin();
    }

    @Autowired
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.
        jdbcAuthentication()
        .dataSource(dataSource)
        .usersByUsernameQuery("select email, password from users where email=?")
        .authoritiesByUsernameQuery("select u.email, r.role from users u inner join user_role ur on(u.user_id=ur.user_id) inner join role r on(ur.role_id=r.role_id) where u.email=?")
        .dataSource(dataSource);

    }
}
REPLACE INTO `role` VALUES (1,'ADMIN');
REPLACE INTO `role` VALUES (2,'USER');

ApplicationProperties

server.port=8090
spring.datasource.url=jdbc:mysql://localhost:3306/auth?useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=Turkey
spring.datasource.username=root
spring.datasource.password=
spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=none

共有1个答案

苏乐
2023-03-14

我认为“/”上的get方法是问题所在。它应该是将数据持久化到数据库的post方法。尝试将其更改为post方法。

 类似资料:
  • 我有麻烦让我的数据库连接到WAMP。我做这件事已经有5年了,所以我有点生疏了。我将我的Mysql升级到8.0时遇到了这个错误 我刷新了我的特权,并将插件更改为本机的根。在这一点上我被难倒了。有人能帮帮我吗? 下面是我的数据库类,直到第37行 /** > class Database*/class Database{ 专用$IP、$username、$password、$database; /**

  • 我已经安装了一个MySQL企业版的试用版,当使用捆绑工作台软件连接时,我得到以下错误: 无法加载身份验证插件缓存\u sha2\u密码:找不到指定的模块 在那里我能找到的信息很少。大多数解决方案返回到旧的身份验证方法,但我不想这样做,而且它似乎无论如何都不起作用。。。 HeidiSQL给出了相同的错误消息。 有什么建议吗?

  • 我正在使用jwt auth在我的API中创建RESTful身份验证资源。当客户端应用程序调用登录资源时,如果用户已登录,则必须使当前令牌无效,从而生成新令牌。 但如果当前令牌被列入黑名单,则会抛出。 如何验证令牌是否被列入黑名单?或者如何正确执行用户“注销”?我试图在jwt auth API源代码上找到,但不存在

  • 我是Apache Shiro的初学者。我一直在跟踪文档和许多其他教程,博客等,但我就是无法使身份验证工作。当我尝试使用有效的用户名和密码登录时,总是会引发。我正在使用DynamoDB作为存储用户凭据的自定义领域,但我真的不认为这有什么关系。显然,我存储和/或执行凭据匹配的方式是不正确的。以下是我的设置:

  • 我试图在一个反应式Spring Boot应用程序中配置一个Spring Security性,该应用程序具有一个Vuejs前端,在未经身份验证时将用户重定向到外部OpenID提供程序(用于身份验证)。在用户通过OpenID提供程序进行身份验证并重定向回应用程序(前端)后,将根据OpenID提供程序的响应创建用户名密码身份验证令牌(身份验证),并手动进行身份验证。 但是,在执行此操作时,应用程序似乎无

  • 问题内容: 我试图让我的自定义Java应用程序使用我们的Active Directory服务器进行身份验证,但由于某种原因我无法使其正常工作。谁能看到为什么呢?这是我的方法如下: 结果: 问题答案: 你尝试过这种方式吗? 也更换 与