diff --git a/src/main/java/com/gw/test/controller/GuoWeiController.java b/src/main/java/com/gw/test/controller/GuoWeiController.java new file mode 100644 index 0000000..97737c5 --- /dev/null +++ b/src/main/java/com/gw/test/controller/GuoWeiController.java @@ -0,0 +1,79 @@ +package com.gw.test.controller; + + +import com.gw.test.domain.Result; +import com.gw.test.domain.vo.LoginVo; +import com.gw.test.entity.GuoWei; +import com.gw.test.service.IGuoWeiService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gw + * @since 2024-09-04 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/guowei") +@Tag(name = "用户管理",description = "用户管理接口") +public class GuoWeiController { + + private final IGuoWeiService service; + + @Operation(summary = "用户列表",description = "用户列表接口") + @PostMapping("/list") + public Result> list(){ + return Result.ok(service.list()); + } + + @Operation(summary = "添加用户",description = "添加用户接口") + @PostMapping("/save") + public Result save(GuoWei guoWei) { + service.save(guoWei); + return Result.ok(); + } + + + @Operation(summary = "删除用户",description = "删除用户接口") + @PostMapping("/delete") + public Result delete(Integer id) { + service.removeById(id); + return Result.ok(); + } + + + @Operation(summary = "用户修改",description = "用户列修改口") + @PostMapping("/update") + public Result update(GuoWei guoWei) { + service.updateById(guoWei); + return Result.ok(); + } + + @Operation(summary = "用户登录",description = "用户登录接口") + @PostMapping("/login") + public Result login(String username, String password) { + return Result.ok(service.login(username, password)); + } + + @Operation(summary = "用户注册",description = "用户注册接口") + @PostMapping("/register") + public Result register(GuoWei guoWei) { + boolean re = service.register(guoWei); + if (re) + return Result.ok(); + else + return Result.error("注册失败"); + + } +} diff --git a/src/main/java/com/gw/test/entity/GuoWei.java b/src/main/java/com/gw/test/entity/GuoWei.java new file mode 100644 index 0000000..0a337ff --- /dev/null +++ b/src/main/java/com/gw/test/entity/GuoWei.java @@ -0,0 +1,48 @@ +package com.gw.test.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author gw + * @since 2024-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("guo_wei") +@Schema($schema = "GuoWei对象",description = "") +public class GuoWei implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema($schema = "主键") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @Schema($schema = "用户名") + private String username; + + @Schema($schema = "密码") + private String password; + + @Schema($schema = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private String createTime; + + @Schema($schema = "手机号") + private String phoneNumber; + + +} diff --git a/src/main/java/com/gw/test/mapper/GuoWeiMapper.java b/src/main/java/com/gw/test/mapper/GuoWeiMapper.java new file mode 100644 index 0000000..75cc4b9 --- /dev/null +++ b/src/main/java/com/gw/test/mapper/GuoWeiMapper.java @@ -0,0 +1,18 @@ +package com.gw.test.mapper; + +import com.gw.test.entity.GuoWei; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gw + * @since 2024-09-04 + */ +//@Mapper +public interface GuoWeiMapper extends BaseMapper { + +} diff --git a/src/main/java/com/gw/test/service/IGuoWeiService.java b/src/main/java/com/gw/test/service/IGuoWeiService.java new file mode 100644 index 0000000..6a6ac36 --- /dev/null +++ b/src/main/java/com/gw/test/service/IGuoWeiService.java @@ -0,0 +1,23 @@ +package com.gw.test.service; + +import com.gw.test.domain.vo.LoginVo; +import com.gw.test.entity.GuoWei; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.security.core.userdetails.UserDetails; + +/** + *

+ * 服务类 + *

+ * + * @author gw + * @since 2024-09-04 + */ +public interface IGuoWeiService extends IService { + + UserDetails loadUserByUsername(String s); + + LoginVo login(String username, String password); + + boolean register(GuoWei guoWei); +} diff --git a/src/main/java/com/gw/test/service/impl/GuoWeiServiceImpl.java b/src/main/java/com/gw/test/service/impl/GuoWeiServiceImpl.java new file mode 100644 index 0000000..b4626b0 --- /dev/null +++ b/src/main/java/com/gw/test/service/impl/GuoWeiServiceImpl.java @@ -0,0 +1,76 @@ +package com.gw.test.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gw.test.domain.vo.LoginVo; +import com.gw.test.entity.GuoWei; +import com.gw.test.entity.User; +import com.gw.test.mapper.GuoWeiMapper; +import com.gw.test.service.IGuoWeiService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gw.test.utils.JWTUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author gw + * @since 2024-09-04 + */ +@RequiredArgsConstructor +@Service +public class GuoWeiServiceImpl extends ServiceImpl implements IGuoWeiService { + private final JWTUtil JWTUtil; + + private final PasswordEncoder passwordEncoder; + + @Override + public UserDetails loadUserByUsername(String s) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("username", s); + List list = list(wrapper); + if (list.isEmpty()) return null; + GuoWei guoWei = list.get(0); + return new User(guoWei, null); + } + + @Override + public LoginVo login(String username, String password) { + User user = (User) loadUserByUsername(username); + if (user == null) return null; + + if (!passwordEncoder.matches(password, user.getPassword())) return null; + + + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(authentication); + + LoginVo re = new LoginVo(); + + re.setId(user.getEntity().getId()); + re.setUsername(user.getUsername()); + re.setToken(JWTUtil.generateToken(user)); + + return re; + } + + @Override + public boolean register(GuoWei guoWei) { + Long count = lambdaQuery() + .eq(GuoWei::getUsername, guoWei.getUsername()) + .count(); + + if (count > 0) return false; + + guoWei.setPassword(passwordEncoder.encode(guoWei.getPassword())); + return save(guoWei); + } +} diff --git a/src/main/resources/mapper/GuoWeiMapper.xml b/src/main/resources/mapper/GuoWeiMapper.xml new file mode 100644 index 0000000..70847df --- /dev/null +++ b/src/main/resources/mapper/GuoWeiMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + +