簡體   English   中英

使用Spring Boot Rest API的mysql身份驗證問題

[英]authentication issue with mysql using spring boot rest api

我通過spring boot rest api與mysql發生身份驗證問題。 我想使用'saveUser'方法從服務中自己創建一個用戶,並訪問此用戶信息和rest api。 在不使用任何mvc結構(例如html,js,css)的情況下,我想使用該服務創建一個用戶,然后使用該用戶登錄以使用api。我在下面提到了該項目的所有單元。 如果您有幫助,我將不勝感激。

用戶

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

    }
}

資源中的data.sql

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

應用屬性

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

我認為“ /”上的get方法是問題。 它應該是一種將數據保存到數據庫的后期方法。 嘗試將其更改為post方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM