Spring Boot 3 配置环境(重复)&&项目结构(重复)&&Spring Security相关(重点)

发布于:2023-01-26 ⋅ 阅读:(615) ⋅ 点赞:(0)

一:配置环境(重复Spring Boot 2)

环境配置springboot.jpg

二:项目开发

A.项目结构(重复Spring Boot 2)

spring结构.jpg

B.注解

注解1.jpg
注解2.jpg
注解3.jpg
注解4.jpg
注解5.jpg
注解6.jpg

C.项目各层实现

C1:pojo层

pojo层实现.jpg

C2:mapper层

mapper层实现.jpg

C3:controller层

@RestController
public class UserController {

    @Autowired
    UserMapper userMapper;

    /**
     * 查询所有用户
     */
    @GetMapping("/user/all/")
    public List<User> getAll() {
        return userMapper.selectList(null);
    }

    /**
     * 查询单个用户
     */
    @GetMapping("/user/{userId}/")
    public User getUser(@PathVariable int userId) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",userId);

        return userMapper.selectOne(queryWrapper);

        // 范围遍历
        // public List<User> getUser(int userId)
        // queryWrapper.ge("id", 2).le("id", 3);
        // return userMapper.selectList(queryWrapper);
    }

    /**
     * 添加某个用户 直接输入 id name password
     * @param userId
     * @param username
     * @param password
     * @return Add User Sucessfully
     */
    @GetMapping("/user/add/{userId}/{username}/{password}/")
    public String addUser (@PathVariable int userId,
                           @PathVariable String username,
                           @PathVariable String password) {

        User user = new User(userId, username, password);
        userMapper.insert(user);
        return "Add User Sucessfully";
    }

    /**
     * 删除某个用户,直接输入 id
     * @param userId
     * @return Delete User Successfully
     */
    @GetMapping("/user/delete/{userId}/")
    public String deleteUser(@PathVariable int userId) {
        userMapper.deleteById(userId);
        return "Delete User Successfully";
    }
}



三:Spring Security应用(重点)

1.user+生成的密码

spring security机制:用户认证
用户认证机制+依赖.jpg

C4:service层

2. 与数据库对接–明文密码–密码要{noop}

明文密码(数据库) [注数据库存密码要{noop}]
333333.jpg
1111.jpg

第一步

用户认证+数据库1.jpg

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    //快捷键 windowsalt + insert / mac是option + enter
    @Autowired
    private UserMapper userMapper;
    // 传入 username 返回对应的信息,在这里也就是id name pwd
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username);
        User user = userMapper.selectOne(queryWrapper);
        if (user == null) {
            throw new RuntimeException("用户不存在");
        }

        return new UserDetailsImpl(user);
    }
}


第二步

用户认证+数据库2.jpg


@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDetailsImpl implements UserDetails {

    private User user;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    @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;
    }
}

3.密文密码(数据库)

config 下新建 SecurityConfig
实现config.SecurityConfig类,用来实现用户密码的加密存储。

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看