Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十九(用户中心)


用户搜索到自己心仪的商品,接下来就要去购买,但是购买必须先登录。所以接下来我们编写用户中心,实现用户的登录和注册功能。

用户中心的提供的服务:

  • 用户的注册

  • 用户登录

  • 用户个人信息管理

  • 用户地址管理

  • 用户收藏管理

  • 我的订单

  • 优惠券管理

这里我们暂时先实现基本的:注册和登录功能,其它功能大家可以自行补充完整。

因为用户中心的服务其它微服务也会调用,因此这里我们做聚合:

  • ly-user:父工程,包含2个子工程:

  • ly-user-interface:实体及接口

  • ly-user-service:业务和服务

1、创建父module

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改打包方式

在这里插入图片描述

2、创建ly-user-interface

在这里插入图片描述

在这里插入图片描述

3、创建ly-user-service

(1)创建工程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)修改pom.xml引入依赖

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

ly-user

com.leyou.service

1.0.0-SNAPSHOT

4.0.0

ly-user-service

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.mybatis.spring.boot

mybatis-spring-boot-starter

tk.mybatis

mapper-spring-boot-starter

mysql

mysql-connector-java

com.leyou.service

ly-user-interface

${leyou.latest.version}

(3)编写启动类

在这里插入图片描述

在这里插入图片描述

package com.leyou;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication

@EnableDiscoveryClient

@MapperScan(“com.leyou.user.mapper”)

public class LyUserApplication {

public static void main(String[] args) {

SpringApplication.run(LyUserApplication.class,args);

}

}

(4)创建mapper路径

在这里插入图片描述

(5)编写配置文件

在这里插入图片描述

在这里插入图片描述

server:

port: 8088

spring:

application:

name: user-service

datasource:

url: jdbc:mysql://127.0.0.1:3306/yun6

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

eureka:

client:

service-url:

defaultZone: http://127.0.0.1:10086/eureka

instance:

prefer-ip-address: true

ip-address: 127.0.0.1

instance-id: e u r e k a . i n s t a n c e . i p − a d d r e s s . {eureka.instance.ip-address}. eureka.instance.ipaddress.{server.port}

lease-renewal-interval-in-seconds: 3

lease-expiration-duration-in-seconds: 10

mybatis:

type-aliases-package: com.leyou.item.pojo

(6)创建pojo

在这里插入图片描述

(7)添加网关路由

我们修改ly-gateway,添加路由规则,对ly-user-service进行路由:

在这里插入图片描述

user-service: /user/**

二、后台功能准备


1、数据结构

CREATE TABLE tb_user (

id bigint(20) NOT NULL AUTO_INCREMENT,

username varchar(50) NOT NULL COMMENT ‘用户名’,

password varchar(32) NOT NULL COMMENT ‘密码,加密存储’,

phone varchar(20) DEFAULT NULL COMMENT ‘注册手机号’,

created datetime NOT NULL COMMENT ‘创建时间’,

salt varchar(32) NOT NULL COMMENT ‘密码加密的salt值’,

PRIMARY KEY (id),

UNIQUE KEY username (username) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT=‘用户表’;

数据结构比较简单,因为根据用户名查询的频率较高,所以我们给用户名创建了索引

2、基本代码

实体类

注意:为了安全考虑。这里对password和salt添加了注解@JsonIgnore,这样在json序列化时,就不会把password和salt返回。

ly-user-interface添加依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

ly-user

com.leyou.service

1.0.0-SNAPSHOT

4.0.0

ly-user-interface

javax.persistence

persistence-api

1.0

com.fasterxml.jackson.core

jackson-databind

tk.mybatis

mapper-core

1.0.4

在这里插入图片描述

在这里插入图片描述

package com.leyou.item.pojo;

import com.fasterxml.jackson.annotation.JsonIgnore;

import lombok.Data;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

import java.util.Date;

@Data

@Table(name = “tb_user”)

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String username;// 用户名

@JsonIgnore

private String password;// 密码

private String phone;// 电话

private Date created;// 创建时间

@JsonIgnore

private String salt;// 密码的盐值

}

mapper

在这里插入图片描述

在这里插入图片描述

public interface UserMapper extends Mapper {

}

Service

在这里插入图片描述

在这里插入图片描述

@Service

public class UserService {

@Autowired

private UserMapper userMapper;

}

3.数据验证功能

(1)接口说明:

实现用户数据的校验,主要包括对:手机号、用户名的唯一性校验。

接口路径

GET /check/{data}/{type}

参数说明:

| 参数 | 说明 | 是否必须 | 数据类型 | 默认值 |

| — | — | — | — | — |

| data | 要校验的数据 | 是 | String | 无 |

| type | 要校验的数据类型:1,用户名;2,手机; | 否 | Integer | 1 |

返回结果:

返回布尔类型结果:

  • true:可用

  • false:不可用

状态码:

  • 200:校验成功

  • 400:参数有误

  • 500:服务器内部异常

(2)controller

在这里插入图片描述

在这里插入图片描述

package com.leyou.user.web;

import com.leyou.user.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class UserController {

@Autowired

private UserService userService;

}

因为有了接口,我们可以不关心页面,所有需要的东西都一清二楚:

  • 请求方式:GET

  • 请求路径:/check/{param}/{type}

  • 请求参数:param,type

  • 返回结果:true或false

在这里插入图片描述

package com.leyou.user.web;

import com.leyou.user.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class UserController {

@Autowired

private UserService userService;

/**

  • 校验数据是否可用

  • @param data

  • @param type

  • @return

*/

@GetMapping(“/check/{data}/{type}”)

public ResponseEntity checkData(@PathVariable(“data”) String data,

@PathVariable(“type”) Integer type) {

return ResponseEntity.ok(userService.checkData(data,type));

}

}

(3)Service

在这里插入图片描述

在这里插入图片描述

package com.leyou.user.service;

import com.leyou.item.pojo.User;

import com.leyou.user.mapper.UserMapper;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.util.CollectionUtils;

@Service

public class UserService {

@Autowired

private UserMapper userMapper;

public Boolean checkData(String data, Integer type) {

User user = new User();

//判断数据类型

switch (type){

case 1:

user.setUsername(data);

break;

case 2:

user.setPhone(data);

break;

default:

return null;

}

return userMapper.selectCount(user) == 0;

}

}

(4)测试

在这里插入图片描述

我们在数据库插入一条假数据:

在这里插入图片描述

然后在浏览器调用接口,测试:

http://localhost:8088/check/admin/1

在这里插入图片描述

4.发送短信功能

短信微服务已经准备好,我们就可以继续编写用户中心接口了。

(1)接口说明

在这里插入图片描述

这里的业务逻辑是这样的:

  • 1)我们接收页面发送来的手机号码

  • 2)生成一个随机验证码

  • 3)将验证码保存在服务端(redis)

  • 4)发送短信,将验证码发送到用户手机

(2)controller

在这里插入图片描述

/*

发送短信

*/

@PostMapping(“code”)

public ResponseEntity sendCode(@RequestParam(“phone”) String phone){

userService.sendCode(phone);

return ResponseEntity.status(HttpStatus.NO_CONTENT).build();

}

(3)service

这里的逻辑会稍微复杂:

  • 生成随机验证码

  • 将验证码保存到Redis中,用来在注册的时候验证

  • 发送验证码到ly-sms-service服务,发送短信

在这里插入图片描述

因此,我们需要引入AMQP:

在这里插入图片描述

因此,我们需要引入AMQP:

org.springframework.boot

spring-boot-starter-amqp

添加RabbitMQ和Redis配置:

在这里插入图片描述

spring:

redis:

host: 192.168.206.66

rabbitmq:

host: 192.168.206.66

username: leyou

password: leyou

virtual-host: /leyou

template:

retry:

enabled: true

initial-interval: 10000ms

max-interval: 210000ms

multiplier: 2

publisher-confirms: true

另外还要用到工具类,生成6位随机码,这个我们封装到了ly-common中,因此需要引入依赖:

在这里插入图片描述

引入common

com.leyou.common

ly-common

${leyou.latest.version}

引入Redis

在这里插入图片描述

org.springframework.boot

spring-boot-starter-data-redis

Service代码:

在这里插入图片描述

在这里插入图片描述

package com.leyou.user.service;

import com.leyou.common.utils.NumberUtils;

import com.leyou.item.pojo.User;

import com.leyou.user.mapper.UserMapper;

import org.springframework.amqp.core.AmqpTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.stereotype.Service;

import org.springframework.util.CollectionUtils;

import tk.mybatis.mapper.annotation.KeySql;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.TimeUnit;

@Service

public class UserService {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
.User;

import com.leyou.user.mapper.UserMapper;

import org.springframework.amqp.core.AmqpTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.stereotype.Service;

import org.springframework.util.CollectionUtils;

import tk.mybatis.mapper.annotation.KeySql;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.TimeUnit;

@Service

public class UserService {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-bpo2t0Jm-1715532632381)]

[外链图片转存中…(img-Of59XUs3-1715532632382)]

[外链图片转存中…(img-jfsKqPAy-1715532632382)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要信息: 电子商城系统主要功能包括:用户注册、用户登录、用户查看商城商品、用户购买商品、用户查看购物车并且清空购物车、用户找回账户以及密码、管理员登录、管理员注册、管理员查看用户信息、管理员删除用户信息、管理员删除商品信息、管理员添加商品信息、管理员修改商品信息、退出登录等。 图形可视化界面运行下能够显示系统启动进度条,删除、添加、注册等相关操作时能够弹出窗口加以提示,退出登录或系统时能够做到单击确认退出按钮才退出登录或系统,能够对用户加以提示。 注册用户或是管理员、添加商品信息、购买商品、删除商品或是用户信息、修改商品信息等相关操作时能够判断有无该用户或是商品。 用户在购买商品的时候同时更新商品的库存数量,管理员删除管理员时可以做到同时删除用户的购买信息。 主要内容: 一、项目名称   基于JAVASE的电子商城系统 二、功能要求 1、用户注册 2、用户登录 3、用户查看商品列表 4、用户购买商品 5、用户查看购买商品列表 6、用户清空购物车 7、用户找回账户和密码 8、管理员登录 9、管理员注册 10、查看用户信息 11、查看商品信息 12、删除用户信息 13、删除商品信息 14、添加商品信息 15、修改商品信息 16、退出用户登录 17、退出管理员登录 18、退出商城 三、需求分析 该系统的用户商城消费者和商城管理者,根据客户的要求,可以注册、登录、购物、查看购物车信息、找回账户和密码,管理员可以对商品信息进行增加、修改、删除操作,可以对用户进行查看和删除。 四、设计思想 1、在控制台与图形可视化界面下运行 2、使用Mysql数据库存取用户登录信息和商品信息 3、使用List存取商品购买信息 4、把程序分为多个类,多个类之间的互相调用。 5、用户或是管理员进行注册、登录时能够提供校验码。 6、用户或是管理员获取数据库信息时能够与数据库进行交互。 7、用户购物要做到简洁明了。 8、用户只需要身份证号码和邮箱地址就能找回账户和密码。 9、注册、删除、修改等操作要有信息提示。 10、用户、管理员进行操作时能够做到操作提示与用户名提示。 11、退出登录或是退出系统时能够做到让用户有所考虑。 五、具体实现   1、技术思路: 界面:基于控制台与图形可视化界面(Swing)实现用户的输入和输出。 程序流程:在函数中利用循环与递归 ,读取用户输入,调用模块实现各个子功能。 2、功能子模块划分: ① 注册模块 ② 登录模块 ③ 查看商品模块(查看商品列表,购买商品) ④ 查看购买商品信息 ⑤ 管理员登录(添加管理员信息,对商品信息进行查看、增加、 修改、删除,对用户信息进行查看、删除,删除用户信息 时能够做到同时删除消费记录) ⑥ 退出系统 六、运行截图 1、商城系统启动进度条(进度条能够做到动态加载): 2、商城主界面: 3、用户注册界面(填写注册信息不符合要求时能够弹窗提示、并 且判断用户名是否重复等): 4、用户登录界面(账户、密码不一致时能弹窗提示): 5、用户服务选择界面(能够提示用户名): 6、购买商品界面(能够判断输入的商品序号是否正确): 7、查看购物车界面(能够一键清空购物车): 8、查看商城商品信息界面: 9、管理员登录界面: 10、找回账户与密码界面: 11、管理员服务选择界面: 12、添加管理员界面: 13、查看用户信息界面: 14、删除用户信息界面: 15、删除商品信息界面: 16、添加商品信息界面: 17、修改商品信息界面: 18、退出账号、管理员登录、商城系统时要有提示:
本文介绍了一个基于Spring BootSpring CloudVue前后端分离项目实战。这个项目是一个简单的在线商城,包含了用户注册、登录、商品展示、购物车、订单管理等功能。通过这个项目,读者可以深入理解前后端分离的架构模式和互联网应用的开发方式。 首先,文章介绍了前后端分离的基本概念和优势。前后端分离是将应用的前端和后端代码分开来开发,使得前端和后端具有独立的开发周期和技术栈,进而提高了开发效率和代码质量。同时,前后端分离还可以提供更好的用户体验和灵活性,对于互联网应用来说尤为重要。 接下来,文章介绍了项目的架构和技术栈。项目采用了Spring BootSpring Cloud框架来实现后端代码,采用MyBatis作为ORM框架和Redis作为缓存中间件。同时,项目还采用了Vue.js作为前端框架和Element UI组件库来实现前端页面。通过这些开源框架和组件,可以快速搭建一个前后端分离的互联网应用。 然后,文章介绍了项目的核心功能和代码实现。在用户注册和登录方面,项目采用了Spring Security框架和JWT令牌来实现用户认证和授权,保证了用户信息的安全性。在商品展示和购物车方面,项目采用了Vue.js来实现前端页面和事件处理。在订单管理方面,项目采用了MyBatis Plus来实现订单数据的持久化和分页查询。 最后,文章介绍了项目的测试和优化。通过对项目的压力测试和性能测试,文章发现项目还存在一些性能瓶颈和安全隐患,可以通过优化数据库查询、缓存配置和代码实现来提高应用的性能和安全性。 总之,这篇文章介绍了一个基于Spring BootSpring CloudVue前后端分离项目实战,通过实现一个在线商城的功能,展示了前后端分离的开发模式和互联网应用的开发技术栈。本文可以作为前后端分离开发的入门教程,也可以作为互联网应用开发的参考文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值