苍穹外卖项目-day02-员工管理模块笔记

张开发
2026/4/6 2:34:14 15 分钟阅读

分享文章

苍穹外卖项目-day02-员工管理模块笔记
在这个AI肆意编程的时代我为什么要学习苍穹外卖全文接近5700字记录我用SpringBoot写员工登录与新增员工的踩坑与思考【作者说现在的AI疯狂处处可见但我认为作为一个更好的AI使用者应该更要完整的了解一个项目的核心运作只有这样我们对AI话语才会更加准确效率才会更高。所以在这个AI的时代风口下与其相信网上大篇幅的“程序员已die论”不如努力的提升自己要相信自己相信自己可以将无所不能的AI作为自己的工具和“小弟”不要盲目受网络信息的悲观因素影响也不要陷入专业选择的泥潭始终要坚信我们所选择的路就是最好的道路毕竟一个奋发向上的人拿什么输呢本项目将会持续更新感兴趣的读者可以关注点赞不迷路】苍穹外卖项目-day02-员工登录与新增员工模块笔记员工登录与新增员工功能实现要点功能描述员工登录模块用于员工在后台系统中登录新增员工主要是管理员在后台系统新增员工并且存储员工信息包括姓名、账号、手机号、角色分配等字段到数据库需保证数据合法性和唯一性。数据库设计员工表需包含基础字段id主键、username用户名、password加密存储、name姓名、phone手机号、status账号状态如1启用/0禁用。建议密码使用BCrypt或MD5加盐加密。技术实现后端接口通常为POST /admin/employee接收JSON格式的员工数据。数据库表关联员工表如employee和角色关联表如role_employee。权限控制仅限管理员角色操作通过拦截器或注解如PreAuthorize实现。核心代码示例1. 实体类设计publicclassEmployee{privateLongid;privateStringusername;// 账号privateStringname;// 姓名privateStringphone;// 手机号privateStringpassword;// 密码需加密privateIntegerstatus;// 状态1启用0禁用// 省略getter/setter}2. Controller层PostMapping(/login)ApiOperation(value员工登录)publicResultEmployeeLoginVOlogin(RequestBodyEmployeeLoginDTOemployeeLoginDTO){log.info(员工登录{},employeeLoginDTO);EmployeeemployeeemployeeService.login(employeeLoginDTO);//后端与数据库进行匹配//登录成功后生成jwt令牌MapString,ObjectclaimsnewHashMap();claims.put(JwtClaimsConstant.EMP_ID,employee.getId());StringtokenJwtUtil.createJWT(jwtProperties.getAdminSecretKey(),jwtProperties.getAdminTtl(),claims);EmployeeLoginVOemployeeLoginVOEmployeeLoginVO.builder()//.id(employee.getId()).userName(employee.getUsername()).name(employee.getName()).token(token).build();returnResult.success(employeeLoginVO);}Jwt令牌就是相当于“身份证”对员工的身份信息进行整理并且封装起来用token表示。这个token上不仅记录员工的信息而且还记录一个员工的权限例如管理员可以对员工或者菜单进行管理他的权限是比普通员工大的。3JWT令牌创建流程JWT令牌由三部分组成头部Header、载荷Payload和签名Signature。头部声明令牌类型和签名算法载荷包含用户信息和其他声明签名用于验证令牌的完整性。头部通常采用JSON格式指定算法如HS256。载荷包含用户ID、角色等自定义信息可加入过期时间等标准声明。签名部分通过密钥对头部和载荷进行加密生成。将头部、载荷和签名用Base64Url编码后用点号连接起来形成完整的JWT令牌。令牌创建后需在服务端进行验证确保安全性。publicstaticStringcreateJWT(StringsecretKey,longttlMillis,MapString,Objectclaims){// 指定签名的时候使用的签名算法也就是header那部分SignatureAlgorithmsignatureAlgorithmSignatureAlgorithm.HS256;// 生成JWT的时间longexpMillisSystem.currentTimeMillis()ttlMillis;DateexpnewDate(expMillis);// 设置jwt的bodyJwtBuilderbuilderJwts.builder()// 如果有私有声明一定要先设置这个自己创建的私有的声明这个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声明的.setClaims(claims)// 设置签名使用的签名算法和签名使用的秘钥.signWith(signatureAlgorithm,secretKey.getBytes(StandardCharsets.UTF_8))// 设置过期时间.setExpiration(exp);returnbuilder.compact();}4.关于Token的解密/** * Token解密 * * param secretKey jwt秘钥 此秘钥一定要保留好在服务端, 不能暴露出去, 否则sign就可以被伪造, 如果对接多个客户端建议改造成多个 * param token 加密后的token * return */publicstaticClaimsparseJWT(StringsecretKey,Stringtoken){// 得到DefaultJwtParserClaimsclaimsJwts.parser()// 设置签名的秘钥.setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))// 设置需要解析的jwt.parseClaimsJws(token).getBody();returnclaims;}4.员工退出PostMapping(/logout)ApiOperation(员工退出)publicResultStringlogout(){returnResult.success();}5.新增员工开发模块PostMapping()ApiOperation(新增员工)//publicResultsave(RequestBodyEmployeeDTOemployeeDTO){log.info(新增员工员工数据{},employeeDTO);employeeService.save(employeeDTO);//这里是跟数据库进行交互returnResult.success();//返回成功result}前端效果展示数据库效果展示DTO与VO在2. Controller层中出现了employeeLoginDTO与employeeLoginVO再在里进行解释*DTODataTransferObject*//“数据搬运工”DTO是用于在不同层或系统间传输数据的对象通常不包含业务逻辑。它的核心目的是封装数据并减少网络调用次 数如远程接口通信优化传输效率。DTO的属性通常与底层数据模型如数据库表解耦仅包含传输所需的 字段可能涉及多个领域模型的聚合数据。其特点包括扁平化结构避免嵌套复杂对象。可能包含额外的传输控制字段如分页信息、状态码。序列化友好支持JSON、XML等格式。*VOValueObject*//“数据化妆师”VO是展示层如前端使用的数据对象关注数据的呈现形式而非存储细节。它可能包含格式化的数据如日期字 符串、组合字段或视图特有的计算属性与UI需求强相关。其特点包括包含展示逻辑如状态字段转文字描述。结构可能嵌套适配前端组件需求。与DTO相比更贴近用户视角而非技术视角。注解知识点梳理(SpringBoot)RestControllerRestController是Spring MVC中的一个组合注解结合了Controller和ResponseBody的功能。它用于标记一个类为控制器并默认将所有方法的返回值直接序列化为HTTP响应体如JSON或XML无需额外配置。适用于构建RESTful API。ServiceService是Spring框架的注解用于标记类为业务逻辑层的组件Service层。它被Spring容器自动扫描并管理通常用于实现业务逻辑。与Repository或Component类似但语义上更明确表示服务层。RequestMappingRequestMapping用于映射HTTP请求路径到控制器方法或类。可指定URL路径、HTTP方法如GET、POST、请求参数等,它是前端与后端的交互入口只负责打通前后端的请求通路。RequestBodyRequestBody用于将HTTP请求体如JSON或XML反序列化为Java对象。通常与PostMapping或PutMapping配合使用处理POST/PUT请求的请求体数据。PostMappingPostMapping是RequestMapping(method RequestMethod.POST)的快捷方式专门用于处理HTTP POST请求。只要前端触发PostMapping括号里的内容地址那么就执行PostMapping后面的代码逻辑。ApiOperation注解详解ApiOperation是Swagger框架中的核心注解之一用于描述API接口的功能和细节。通常与Api、ApiModel等注解配合使用生成规范的API文档。属性在这里主要使用tags接口所属的分组标签。若未指定默认使用Controller的类名还有value属性用来写接口的简要功能notes属性用来写详细的参数说明或业务规则。关键区别与用途RestController定义RESTful控制器替代传统ControllerResponseBody。Service标识业务逻辑层组件由Spring依赖注入管理。RequestMapping通用请求映射支持所有HTTP方法。PostMapping专用于POST请求的简化注解。RequestBody解析请求体为Java对象通常用于接收JSON/XML数据。常见问题与解决数据唯一性冲突将表中的id字段设为自增主键可以将数据按顺序存储查询效率更高数据库添加唯一索引如username和phone字段。后端插入前主动查询校验。密码安全性这里为了避免明文存储使用MD5加密防止传给前端密码导致账号数据丢失。还可以推荐使用 BCrypt算法 它生成的密码密文带有随机盐值即使两个用户密码相同也会输出不一样的结果破解难度会大大增加它的长度更长且不可逆初始密码可设为随机字符串或默认值需首次登录修改。日志记录通过AOP或拦截器记录操作日志如“新增员工张三”。扩展功能建议批量导入支持Excel文件导入员工数据。初始密码通知通过短信或邮件发送临时密码。角色分配动态绑定角色权限需关联角色表查询。以上内容可结合实际项目需求调整重点关注数据校验、权限控制及异常处理。实战总结与思考本次主要完成了员工管理模块中员工登录、退出、新增等核心基础功能的开发通过这部分功能的实战我系统梳理并掌握了Spring Boot后端开发的核心注解与分层开发逻辑从控制器层接收前端请求到服务层处理业务逻辑再到数据层操作数据库清晰理解了各层级的职责划分与协作流程这将会是java后端工作的核心内容。在功能实现过程中也针对性解决了数据唯一性冲突、密码安全存储、接口文档标注、操作日志记录等实际开发问题学会了从数据库层面、代码层面对数据进行校验和安全处理夯实了后端基础开发能力。本篇笔记仅聚焦员工登录、退出、新增等基础小模块员工信息查询、删除等核心功能将整合至后续模块统一梳理学习。后续我会继续完善员工管理全流程功能补齐查询、删除、分页等模块搭建完整的员工管理业务体系进一步深化对Spring Boot框架及后端开发流程的掌握不断优化代码逻辑与业务处理能力。

更多文章