帮我用spring boot写一个学生宿舍管理系统多角色登录功能
时间: 2023-11-14 14:06:06 浏览: 38
好的,下面是一个简单的学生宿舍管理系统多角色登录功能的实现,使用了Spring Boot和Spring Security框架。
首先,我们需要定义几个角色,比如学生、宿管、管理员。
```java
public enum Role {
STUDENT,
DORMITORY_MANAGER,
ADMIN;
}
```
然后,我们定义一个User类,用于表示系统中的用户。每个用户都有一个用户名、密码和角色列表。
```java
public class User implements UserDetails {
private String username;
private String password;
private List<Role> roles;
// getters and setters
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
for (Role role : roles) {
authorities.add(new SimpleGrantedAuthority(role.toString()));
}
return authorities;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
```
接着,我们需要实现一个UserDetailsService,用于根据用户名加载用户信息。
```java
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 根据用户名从数据库中获取用户信息
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return user;
}
}
```
在Spring Security的配置类中,我们需要定义各个角色的访问权限。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/student/**").hasAuthority(Role.STUDENT.toString())
.antMatchers("/dormitory-manager/**").hasAuthority(Role.DORMITORY_MANAGER.toString())
.antMatchers("/admin/**").hasAuthority(Role.ADMIN.toString())
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
最后,我们可以在Controller中使用@PreAuthorize注解来限制访问权限。
```java
@Controller
@RequestMapping("/student")
@PreAuthorize("hasAuthority('STUDENT')")
public class StudentController {
// 学生相关操作
}
@Controller
@RequestMapping("/dormitory-manager")
@PreAuthorize("hasAuthority('DORMITORY_MANAGER')")
public class DormitoryManagerController {
// 宿管相关操作
}
@Controller
@RequestMapping("/admin")
@PreAuthorize("hasAuthority('ADMIN')")
public class AdminController {
// 管理员相关操作
}
```
以上就是一个简单的学生宿舍管理系统多角色登录功能的实现。