Java 当您有自定义用户模型时,如何在Spring Boot中设置角色?
我的目标是在SpringBoot中创建一个自定义用户模型,并将其用于身份验证和授权。它将有自定义字段,但为了尝试,我将使用一个简单的字段 这是我的用户模型(user.java): 我有一个UserController,因此可以注册一个新用户(UserController.java): 这是我的UserDetailsService实现(UserDetailsServiceImpl.java): 在这里我配置了一些东西。。。(WebSecurityConfig.java): 问题是在哪里以及如何向用户添加角色? 在UserDetailsServiceImpl中?还是在用户控制器中 我搜索了整个官方文件,但它非常不完整。。。Java 当您有自定义用户模型时,如何在Spring Boot中设置角色?,java,spring-boot,spring-security,spring-data-jpa,Java,Spring Boot,Spring Security,Spring Data Jpa,我的目标是在SpringBoot中创建一个自定义用户模型,并将其用于身份验证和授权。它将有自定义字段,但为了尝试,我将使用一个简单的字段 这是我的用户模型(user.java): 我有一个UserController,因此可以注册一个新用户(UserController.java): 这是我的UserDetailsService实现(UserDetailsServiceImpl.java): 在这里我配置了一些东西。。。(WebSecurityConfig.java): 问题是在哪里以及如何向用
请记住,
密码
字段(和/或几乎任何其他字段)的请求参数不是一个好主意;请求参数用于其他一些用例。在您的情况下,您希望将所有这些作为POST
请求正文的一部分发送。您可以在按用户名加载用户时急切地获取关联,也可以定义一个单独的服务来负责获取关联角色。
@Entity
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
@ManyToMany
private Set<Role> roles;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
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 Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
}
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/users")
public @ResponseBody
String registerUser(@RequestParam String email,
@RequestParam String username,
@RequestParam String password) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
userService.save(user);
return "User registered";
}
}
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = this.userService.findByUsername(username);
if(user == null) {
throw new UsernameNotFoundException("User doesn't exists.");
}
return user;
}
}
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsServiceImpl userDetailsServiceImpl() {
return new UserDetailsServiceImpl();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.httpBasic();
}
}