基于spring boot学生宿舍管理系统同一表分三个角色登录功能
时间: 2023-07-29 18:09:09 浏览: 66
可以考虑在数据库中创建一个用户表,包含用户的信息和角色信息。用户登录时,根据用户名和密码查询用户表,获取用户的角色信息,然后根据不同的角色跳转到不同的页面。
在Spring Boot中,可以使用Spring Security来实现角色授权和认证功能。具体步骤如下:
1. 添加Spring Security依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 配置Spring Security
在Spring Boot应用程序中,可以通过创建一个继承了WebSecurityConfigurerAdapter的配置类来配置Spring Security。
例如:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
在上面的配置中,我们定义了两个角色:ADMIN和USER,分别对应管理员和普通用户。我们还定义了一个CustomUserDetailsService类,用于从数据库中获取用户信息。
3. 创建自定义UserDetailsService
可以通过继承UserDetailsService接口来创建自定义的UserDetailsService类,用于从数据库中获取用户信息。
例如:
```java
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return new CustomUserDetails(user);
}
}
```
在上面的代码中,我们通过userRepository从数据库中获取了用户信息,并将其封装到了一个CustomUserDetails对象中返回。
4. 创建自定义UserDetails
可以通过继承UserDetails接口来创建自定义的UserDetails类,用于封装从数据库中获取的用户信息。
例如:
```java
public class CustomUserDetails implements UserDetails {
private User user;
public CustomUserDetails(User user) {
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
for (Role role : user.getRoles()) {
authorities.add(new SimpleGrantedAuthority(role.getName()));
}
return authorities;
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
```
在上面的代码中,我们从User对象中获取了角色信息,并将其封装到了一个List<GrantedAuthority>对象中返回。
5. 创建Controller
最后,创建Controller来处理用户登录和访问控制。
例如:
```java
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
@GetMapping("/admin")
public String admin() {
return "admin";
}
@GetMapping("/user")
public String user() {
return "user";
}
@GetMapping("/login")
public String login() {
return "login";
}
}
```
在上面的代码中,我们定义了四个访问路径:/,/admin,/user和/login。/路径对应home页面,/admin路径对应管理员页面,/user路径对应普通用户页面,/login路径对应登录页面。
以上就是基于Spring Boot实现学生宿舍管理系统同一表分三个角色登录功能的步骤。