Я изучаю Spring Security с помощью REST, и у меня есть 2 таблицы MySQL, одна для пользователей и одна для авторитетных. User_id из таблицы полномочий - это внешний ключ для идентификатора из таблицы пользователей. Я хочу использовать эти роли из таблицы полномочий в Spring Security для авторизации на основе ролей. Но у меня есть проблема в начале.
Когда я пытаюсь выполнить запрос POST для вставки некоторых данных в эти 2 таблицы, user_id из таблицы полномочий равен NULL.
Это код:
Пользователь:
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class ApplicationUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String username;
private String password;
@OneToMany(mappedBy="applicationUser", cascade=CascadeType.ALL)
private List<Authorities> authorities;
public ApplicationUser() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Authorities> getAuthorities() {
return authorities;
}
public void setAuthorities(List<Authorities> authorities) {
this.authorities = authorities;
}
}
Орган власти:
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
public class Authorities {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String role;
@JsonIgnore
@ManyToOne(cascade= {CascadeType.DETACH, CascadeType.MERGE,
CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name="user_id")
private ApplicationUser applicationUser;
public Authorities() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public ApplicationUser getApplicationUser() {
return applicationUser;
}
public void setUser(ApplicationUser applicationUser) {
this.applicationUser = applicationUser;
}
}
Контроллер REST:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private ApplicationUserRepository applicationUserRepository;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@GetMapping("/sign-up")
public List<ApplicationUser> getUsers() {
return applicationUserRepository.findAll();
}
@PostMapping("/sign-up")
public void signUp(@RequestBody ApplicationUser user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
applicationUserRepository.save(user);
}
}
И когда я пытаюсь сделать POST-запрос с этими данными:
{
"username": "ion",
"password": "1234",
"authorities": [
{
"role": "ROLE_USER"
}
]
}
ответ 200, но таблицы MySQL выглядят так:
Итак, таблица пользователя выглядит нормально, но таблица полномочий имеет ячейку user_id NULL, и она должна быть 82.
Я хочу знать, как решить эту проблему, и любые отзывы будут оценены.