本系统采用的是SpringBoot框架搭建,重点介绍管理员登录、管理员对用户操作、用户登陆操作
时间: 2024-05-13 08:18:46 浏览: 63
管理员登录:
管理员登录是系统的入口之一,只有通过管理员登录,才能对用户进行操作。在SpringBoot框架中,可以使用Spring Security模块来实现安全认证和授权管理。
1. 配置Spring Security依赖
在pom.xml文件中添加以下依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 配置Spring Security的安全策略
在SpringBoot框架中,可以使用Java配置或者注解配置来配置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")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/admin")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
上面的代码中,通过`@EnableWebSecurity`注解启用了Spring Security,并且配置了访问/admin路径需要管理员角色才能访问,其他路径需要登录认证后才能访问。
3. 实现自定义的用户服务
在上面的代码中,我们注入了一个`CustomUserDetailsService`对象,这个对象需要实现`UserDetailsService`接口,并且重写`loadUserByUsername`方法来实现自定义的用户服务。
以下是示例代码:
```
@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("用户名不存在");
}
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
}
}
```
上面的代码中,我们通过`UserRepository`来查询数据库中的用户信息,并且将其封装成一个`UserDetails`对象返回。
管理员对用户操作:
在管理员登录之后,可以对用户进行各种操作,包括查看用户信息、修改用户信息、删除用户等。在SpringBoot框架中,可以使用Spring Data JPA来实现对数据库的操作,以下是示例代码:
1. 定义用户实体类
```
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true, length = 20)
private String username;
@Column(nullable = false, length = 64)
private String password;
@Column(nullable = false, length = 20)
private String name;
@Column(nullable = false, length = 1)
private Integer gender;
// 省略getters和setters
}
```
2. 定义用户仓库接口
```
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
3. 编写用户控制器
```
@RestController
@RequestMapping("/admin")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public List<User> userList() {
return userRepository.findAll();
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
user.setPassword(passwordEncoder().encode(user.getPassword()));
return userRepository.save(user);
}
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
User oldUser = userRepository.getOne(id);
oldUser.setName(user.getName());
oldUser.setGender(user.getGender());
return userRepository.save(oldUser);
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
userRepository.deleteById(id);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
上面的代码中,我们通过`@RestController`注解来定义一个RESTful风格的控制器,并且使用`@RequestMapping`注解来指定根路径为/admin。在控制器中,我们注入了`UserRepository`对象,使用GET、POST、PUT、DELETE等HTTP请求方法来处理用户的增删改查操作。
用户登录操作:
用户登录是系统的另一个入口,用户登录成功之后,可以查看自己的信息、修改自己的信息等。在SpringBoot框架中,可以使用Spring Security模块来实现安全认证和授权管理,以下是示例代码:
1. 配置Spring Security依赖和安全策略(与管理员登录相同)
2. 实现自定义的用户服务(与管理员登录相同)
3. 实现用户控制器
```
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private CustomUserDetailsService userDetailsService;
@GetMapping("/info")
public UserDetails userInfo(Authentication authentication) {
return userDetailsService.loadUserByUsername(authentication.getName());
}
@PutMapping("/info")
public UserDetails updateUserInfo(@RequestBody User user, Authentication authentication) {
User oldUser = userRepository.findByUsername(authentication.getName());
oldUser.setName(user.getName());
oldUser.setGender(user.getGender());
return userDetailsService.loadUserByUsername(authentication.getName());
}
// 省略userRepository和passwordEncoder的定义
}
```
上面的代码中,我们使用`@GetMapping`和`@PutMapping`注解来定义GET和PUT请求的处理方法,并且使用`Authentication`对象来获取当前登录的用户信息。在更新用户信息的方法中,我们通过`userRepository`对象来查询当前登录的用户信息,并且将其更新到数据库中。最后,我们通过`userDetailsService`对象来重新加载用户信息并返回。
阅读全文