【笔记3-用户模块】从0开始 独立完成企业级Java电商网站开发(服务端)

news/2024/5/19 12:42:33/文章来源:https://chenchenchen.blog.csdn.net/article/details/104263405

数据表结构设计

file

关系设计file

为什么不用外键?分库分表有外键会非常麻烦,清洗数据也很麻烦。数据库内置触发器也不适合采用。

查业务问题的后悔药——时间戳create_time 数据创建时间
update_time 数据更新时间可以用于查询业务,主要要存储datetime类型。

用户模块

用户表file

create table mmall_user(
id int(11) PRIMARY key not null auto_increment comment '用户表id',
username varchar(50) not null comment '用户名',
password varchar(50) not null,
email varchar(50) DEFAULT null,
phone varchar(50) DEFAULT null,
question VARCHAR(100) DEFAULT null,
answer varchar(100) DEFAULT null,
role int(4) not null,
create_time datetime not null,
unique key user_name_unique (username) using btree
)engine=INNODB auto_increment=21 DEFAULT charset=utf8

用户名username设置为唯一索引unique由于用户名是不能重复的,在并发的时候可以通过锁的形式解决,但是当架构变成分布式后,通过数据库底层的unique key唯一索引,交给mysql完成了唯一的验证。

涉及知识点

  • 横向越权、纵向越权安全漏洞

横向越权:攻击者尝试访问与他拥有相同权限的用户的资源纵向越权:低级别攻击者尝试访问高级别用户的资源

  • 高复用服务响应对象的设计思想及抽象封装

file

  • MD5明文加密及增加salt值

关于MD5网上又很多资料,是一个安全得散列算法,虽然过程不可逆,但是还是可以通过穷举法获取原值增加salt值(加盐值)可以一定程度上解决上面得问题,具体得看链接

  • Guava缓存的使用
package com.mmall.common;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;public class TokenCache {public static final String TOKEN_PREFIX = "token_";private static Logger logger = LoggerFactory.getLogger(TokenCache.class);private static LoadingCache<String, String> localCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(10000) //本地最大缓存10000.expireAfterAccess(12, TimeUnit.HOURS) //缓存有效期.build(new CacheLoader<String, String>() {//默认的数据加载实现,当调用get取值的时候,如果key没有对应的值,就调用这个方法进行加载@Overridepublic String load(String s) throws Exception {return "null";}});public static void setKey(String key, String value) {localCache.put(key, value);}public static String getKey(String key) {String value = null;try {value = localCache.get(key);if ("null".equals(key)) {return null;}return value;} catch (Exception e) {logger.error("localCache get error", e);}return null;}
}

  • Session的使用

Servlet的内置对象,具体查看Servlet九大内置对象

  • 方法局部演进

功能模块

file

接口设计

门户_用户接口

1.登录

/user/login.do post(代码需要post方式请求),开放get,方便调试

request

username,password

response

success

{"status": 0,"data": {"id": 12,"username": "aaa","email": "aaa@163.com","phone": null,"role": 0,"createTime": 1479048325000,"updateTime": 1479048325000}
}

2.注册

/user/register.do

request

username,password,email,phone,question,answer

response

success

{"status": 0,"msg": "校验成功"
}

3.检查用户名是否有效

/user/check_valid.do

/check_valid.do?str=admin&type=username就是检查用户名。

request

str,type
str可以是用户名也可以是email。对应的type是username和email

response

success

{"status": 0,"msg": "校验成功"
}

4.获取登录用户信息

/user/getuserinfo.do

request

无参数

response

success

{"status": 0,"data": {"id": 12,"username": "aaa","email": "aaa@163.com","phone": null,"role": 0,"createTime": 1479048325000,"updateTime": 1479048325000}
}

5.忘记密码

/user/forgetgetquestion.do

localhost:8080/user/forgetgetquestion.do?username=geely

request

username

response

success

{"status": 0,"data": "这里是问题"
}

6.提交问题答案

/user/forgetcheckanswer.do

localhost:8080/user/forgetcheckanswer.do?username=aaa&question=aa&answer=sss

request

username,question,answer

response

正确的返回值里面有一个token,修改密码的时候需要用这个。传递给下一个接口

success

{"status": 0,"data": "531ef4b4-9663-4e6d-9a20-fb56367446a5"
}

7.忘记密码的重设密码

/user/forgetresetpassword.do

localhost:8080/user/forgetresetpassword.do?username=aaa&passwordNew=xxx&forgetToken=531ef4b4-9663-4e6d-9a20-fb56367446a5

request

username,passwordNew,forgetToken

response

success

{"status": 0,"msg": "修改密码成功"
}

8.登录中状态重置密码

/user/reset_password.do

request

passwordOld,passwordNew

response

success

{"status": 0,"msg": "修改密码成功"
}

9.登录状态更新个人信息

/user/update_information.do

request

email,phone,question,answer

response

success

{"status": 0,"msg": "更新个人信息成功"
}

10.获取当前登录用户的详细信息,并强制登录

/user/get_information.do

request

无参数

response

success

{"status": 0,"data": {"id": 1,"username": "admin","password": "","email": "admin@163.com","phone": "13800138000","question": "question","answer": "answer","role": 1,"createTime": 1478422605000,"updateTime": 1491305256000}
}

fail

{"status": 10,"msg": "用户未登录,无法获取当前用户信息,status=10,强制登录"
}

11.退出登录

/user/logout.do

request

response

success

{"status": 0,"msg": "退出成功"
}

后台_用户接口

1.后台管理员登录

/manage/user/login.do

request

String username,
String password

response

success

{"status": 0,"data": {"id": 12,"username": "aaa","email": "aaa@163.com","phone": null,"role": 0,"createTime": 1479048325000,"updateTime": 1479048325000}
}

2.用户列表

/manage/user/list.do

request

pageSize(default=10)
pageNum(default=1)

response

success

{"status": 0,"data": {"pageNum": 1,"pageSize": 3,"size": 3,"orderBy": null,"startRow": 1,"endRow": 3,"total": 16,"pages": 6,"list": [{"id":17,"username":"rosen","password":"","email":"rosen1@happymmall.com","phone":"15011111111","question":"啊哈哈","answer":"服不服","role":0,"createTime":1489719093000,"updateTime":1513682138000},{"id":17,"username":"rosen","password":"","email":"rosen1@happymmall.com","phone":"15011111111","question":"啊哈哈","answer":"服不服","role":0,"createTime":1489719093000,"updateTime":1513682138000}],"firstPage": 1,"prePage": 0,"nextPage": 2,"lastPage": 6,"isFirstPage": true,"isLastPage": false,"hasPreviousPage": false,"hasNextPage": true,"navigatePages": 8,"navigatepageNums": [1,2,3,4,5,6]}
}

参考:https://blog.csdn.net/zc_2016/article/details/88818789

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_751764.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记4-商品模块】从0开始 独立完成企业级Java电商网站开发(服务端)

分类管理模块 数据表结构设计 分类表 CREATE TABLE、mmall_ category ( id int(11) NOT NULL AUTO_ INCREMENT COMMENT 类别Id&#xff0c; parent_ id int(11) DEFAULT NULL COMMENT 父类 别id当id0时说明是根节点,一级类别 , name varchar(50) DEFAULT NULL COMMENT 类别…

【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)

购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( id int(11) NOT NULL AUTO_ INCREMENT, user_ id int(11) NOT NULL, product_ id int(11) DEFAULT NULL COMMENT 商品id, quantity int(11) DEFAULT NULL COMMENT 数量, checked int(11) DEFAULT NULL COMMEN…

【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)

支付模块 实际开发工作中经常会遇见如下场景&#xff0c;一个支付模块&#xff0c;一个订单模块&#xff0c;有一定依赖&#xff0c;一个同事负责支付模块&#xff0c;另一个同事负责订单模块&#xff0c;但是开发支付模块的时候要依赖订单模块的相关类 &#xff0c;方法&…

【笔记8-Redis分布式锁】从0开始 独立完成企业级Java电商网站开发(服务端)

Redis分布式锁 Redis分布式锁命令 setnx当且仅当 key 不存在。若给定的 key 已经存在&#xff0c;则 setnx不做任何动作。setnx 是『set if not exists』(如果不存在&#xff0c;则 set)的简写,setnx 具有原子性。 getset先 get 旧值&#xff0c;后set 新值&#xff0c;并返回…

多网站项目的 CSS 架构

复杂的 CSS 架构&#xff0c;可不是你在科班里能学到的东西。 我在互联网行业的第四份工作&#xff0c;是在我国一家领先的媒体新闻公司中任职一名 CSS/HTML 专家&#xff0c;我的主要职责就是开发可重用的、可扩展的、用于多网站的 CSS 架构。 在本文中&#xff0c;我将与大家…

部署网站(虚拟主机,MVC站点,前后台,百度编辑器)出现的问题

开发工具&#xff1a;Vs2010 数据库&#xff1a;Sql2008 部署主机&#xff1a;万网虚拟主机&#xff0c;支持.NET 4.0 / 4.5 SQL2008 等.. 出现问题1&#xff1a;无法访问页面 出现问题2:后台无法访问 出现问题3&#xff1a;使用的编辑器是百度的UM&#xff0c;有使用到的地方…

电商详情页缓存架构(一)电商网站的商品详情页架构

小型电商网站的商品详情页的页面静态化架构以及其缺陷 小型电商网站&#xff0c;一般使用页面静态化的方案&#xff0c;提前将数据渲染到模板中。 问题&#xff1a;每次模板变更&#xff0c;模板对应的所有数据需要全部重新渲染 大型电商网站的异步多级缓存构建 nginx 数据本…

云南楚雄做网站找哪家?

2019独角兽企业重金招聘Python工程师标准>>> 云南楚雄做网站哪家强&#xff1f; 点击进入&#xff1a;http://www.anline.cn 转载于:https://my.oschina.net/jiankian/blog/614142

一分钟了解阿里云产品:利用Rsync服务SLB下多台centos服务器网站文件同步更新...

易淘帮使用了SLB负载均衡&#xff0c;为了保证SLB下两台服务器下面的网站文件同步&#xff0c;易淘帮采用了rsync服务进行同步&#xff0c;每三分钟进行同步一次。 简单介绍下reync&#xff0c;rsync—remote synchronize是类unix系统下的数据镜像备份工具&#xff0c;它的特性…

从全球最大同性交友网站抄了一份不一样的2048小游戏

大家好&#xff0c;我是“前端点线面”&#xff0c;一位新生代农民工&#xff0c;欢迎关注我获取最新前端知识和《前端百题斩》pdf版(包括JS基础篇、浏览器篇、网络篇共计50个章节&#xff0c;5万多字)&#xff0c;此外有喜欢划水的老铁们&#xff0c;可以加我进“前端划水群”…

10个大佬经常逛的小网站,各个爆款!!!

欢迎和号主【前端点线面】进群盘算法&#xff0c;此外本号干货满满&#xff1a;14个门类&#xff08;100篇原创&#xff09;内容&#xff08;又干又硬&#xff09;、《前端百题斩》pdf&#xff08;助力薪资double&#xff09;、20篇思维导图&#xff08;知识系统化、记忆简单化…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作&#xff0c;负责过日请求量过亿的Web系统升级与重构&#xff0c;目前在小满科技创业&#xff0c;从事SaaS服务技术建设。 在过去的工作中&#xff0c;徐汉彬从事各类缓存建设和优化&#xff0c;遇到问题无数&#xf…

npm的gh-pages结合github发布repository网站

如果你在使用github而且创建了一个新的仓库&#xff0c;你会发现&#xff0c;在仓库设置里面有结合github pages发布网站的设置&#xff0c;如下所示&#xff1a; 用过github pages都知道它可以做为静态网站来处理比如html和markdown的文件产生预览效果&#xff0c;我之前做过类…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样&#xff0c;你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

网站安全认证系统的设计变迁

网站在从小到大的发展历程中&#xff0c;安全认证系统是如何变迁的&#xff1f; 下面我们从其发展的几个阶段来分下&#xff1a; 阶段1&#xff1a; 起步&#xff0c;注册用户很少&#xff0c;两台服务器&#xff0c;一台应用服务器&#xff0c;一台数据库服务器。 用户登陆后在…

如何通过IP地址来访问网站

今天我们写极少量的代码&#xff0c;来实现用IP地址来访问一个网站。步骤如下&#xff1a; 打开命令提示符&#xff0c;输入以下代码&#xff1a; &#xff08;这里用CSDN官网https://www.csdn.net/为例&#xff09; 输入代码ping csdn.net /n 5 复制上面正在 Ping csdn.net […

网站推荐——洛谷

粉丝福利 【洛谷】&#xff08;链接在最后&#xff09;是一个我感觉非常良心的网站。自从五月以来&#xff0c;我一直在学习C语言&#xff0c;明年参加CSP大赛&#xff0c;自然少不了刷题。 这个网站我觉得最好的地方&#xff0c;就是它有很多比赛的题库&#xff1a; 有很多…

SEO和SEM策略:建立工作关系

SEO和SEM策略&#xff1a;建立工作关系 原文地址http://www.semorseo.com/1601.html SEO和SEM策略之间的关系将互联网营销的两个方面联系在一起。通过凝聚力&#xff0c;SEO和SEM关系导致更有效的整体策略。许多策略可以利用您的SEO来帮助您的SEM&#xff0c;反之亦然。 创建有…