第一次代码提交

This commit is contained in:
2024-09-04 22:03:41 +08:00
parent 55143e9d8d
commit 94d72c5f46
6 changed files with 258 additions and 0 deletions
@@ -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;
/**
* <p>
* 前端控制器
* </p>
*
* @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<GuoWei>> list(){
return Result.ok(service.list());
}
@Operation(summary = "添加用户",description = "添加用户接口")
@PostMapping("/save")
public Result<Void> save(GuoWei guoWei) {
service.save(guoWei);
return Result.ok();
}
@Operation(summary = "删除用户",description = "删除用户接口")
@PostMapping("/delete")
public Result<Void> delete(Integer id) {
service.removeById(id);
return Result.ok();
}
@Operation(summary = "用户修改",description = "用户列修改口")
@PostMapping("/update")
public Result<Void> update(GuoWei guoWei) {
service.updateById(guoWei);
return Result.ok();
}
@Operation(summary = "用户登录",description = "用户登录接口")
@PostMapping("/login")
public Result<LoginVo> login(String username, String password) {
return Result.ok(service.login(username, password));
}
@Operation(summary = "用户注册",description = "用户注册接口")
@PostMapping("/register")
public Result<Void> register(GuoWei guoWei) {
boolean re = service.register(guoWei);
if (re)
return Result.ok();
else
return Result.error("注册失败");
}
}
@@ -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;
/**
* <p>
*
* </p>
*
* @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;
}
@@ -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;
/**
* <p>
* Mapper 接口
* </p>
*
* @author gw
* @since 2024-09-04
*/
//@Mapper
public interface GuoWeiMapper extends BaseMapper<GuoWei> {
}
@@ -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;
/**
* <p>
* 服务类
* </p>
*
* @author gw
* @since 2024-09-04
*/
public interface IGuoWeiService extends IService<GuoWei> {
UserDetails loadUserByUsername(String s);
LoginVo login(String username, String password);
boolean register(GuoWei guoWei);
}
@@ -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;
/**
* <p>
* 服务实现类
* </p>
*
* @author gw
* @since 2024-09-04
*/
@RequiredArgsConstructor
@Service
public class GuoWeiServiceImpl extends ServiceImpl<GuoWeiMapper, GuoWei> implements IGuoWeiService {
private final JWTUtil JWTUtil;
private final PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String s) {
QueryWrapper<GuoWei> wrapper = new QueryWrapper<>();
wrapper.eq("username", s);
List<GuoWei> 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);
}
}
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gw.test.mapper.GuoWeiMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.gw.test.entity.GuoWei">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="create_time" property="createTime" />
<result column="phone_number" property="phoneNumber" />
</resultMap>
</mapper>