如何向用户添加角色?
用户.java
@Entity
@Table(name="users")
@Data
@AllArgsConstructor
public class AppUser {
@Id
@Column(name ="domainname", unique=true)
private String domainName;
@Column(name ="username")
private String userName;
@JsonIgnore
@Column(name ="password")
private String password;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="user_role_junction",
joinColumns = {@JoinColumn(name="domainName")},
inverseJoinColumns = {@JoinColumn(name="role_id")}
)
private Set<Role> authorities;
public AppUser() {
this.authorities = new HashSet<>();
}
}
角色.java
@Entity
@Table(name="roles")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="role_id")
private Integer roleId;
private String authority;
}
用户控制器.java
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class UserController {
@Autowired
private final UserService userService;
@PostMapping("/register")
public AppUser register (@RequestBody AppUser appUser) {
if (appUser.getAuthorities() == null) {
appUser.setAuthorities(Set.of("user"));
}
return userService.register(appUser);
}
}
用户服务.java
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
public AppUser register(AppUser appUser) {
return userRepository.save(appUser);
}
}
用户存储库.java
@Repository
public interface UserRepository extends JpaRepository<AppUser, String> {
}
WebConfig.java
@Configuration
@EnableWebSecurity
public class WebConfig {
@Bean
public SecurityFilterChain securityFilterChain (HttpSecurity http) throws Exception {
return http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth -> auth
.requestMatchers("login", "register").permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.logout( logout -> logout.permitAll())
.build();
}
}
我尝试使用“用户”角色设置权限,为创建的新用户添加默认角色。但是,我收到错误:“AppUser 类型中的方法 setAuthorities(Set
将不在构造函数中的权限设置为新的HashSet,只需将其设置在字段中,如下所示:
private Set<Role> authorities = new HashSet<>();
可能会解决您的问题