文章目录
电商后端demo(软件安装)
介绍
相关地址
开放前台:test.happymmall.com
开放后台:http://admintest.happymmall.com/#/product/index 账号密码:admin,admin
软件地址:http://learning.happymmall.com/
手记地址:http://www.imooc.com/article/17545 右侧相关的文章链接
问答:http://www.imooc.com/article/18998 以及19094
git地址:https://git.imooc.com/coding-96/coding-96
接口文档:https://gitee.com/imooccode/happymmallwiki/wikis/Home?sort_id=9909
环境配置相关
阿里云yum源配置:http://mirrors.aliyun.com/
辅助课程
https://www.imooc.com/learn/537 linux服务
https://www.imooc.com/learn/389 iptables
166 tomcat基础
443 maven基础
122 mysql的基础
centos安装
下载地址:http://archive.kernel.org/centos-vault/6.8/isos/i386/CentOS-6.8-i386-bin-DVD1.iso
安装过程(mac)
可以参考:https://blog.csdn.net/liudongdong0909/article/details/78398656
网络配置参考:
https://www.cnblogs.com/yaox/p/6635312.html eth0不显示
https://blog.csdn.net/jinwufeiyang/article/details/80211294 service network restart失败
不行多次重启
如果你使用了VPN代理等工具,也可能访问不了网络,先关闭VPN代理试试
配置repo:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# 备用:wget -O /etc/yum.repos.d/CentOS-Base.repo http://learning.happymmall.com/env/Centos-6.repo
安装软件
mac上ssh软件用的shellcraft,ftp用的yummy ftp
安装JDK
-
删除自带JDK:
rpm -qa | grep jdk sudo yum remove 上面查询出来的软件
-
上传rpm包,修改权限为777
也可以使用:wget 下载链接来下载
-
安装:
sudo rpm -ivh jdk-7u80-linux-32bit.rpm 默认的安装路径:/usr/java下
-
配置环境变量
在 /etc/profile中加入 export JAVA_HOME=/usr/java/jdk1.7.0_80 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin 然后source生效
安装Tomcat
-
安装tomcat之前需要装JDK, 这里用的tomcat7
-
下载gz包,然后tar -zxvf 解压,这里放在的目录是/developer/apache-tomcat-7.0.73
-
配置环境变量,同样是profile文件:
export CATALINA_HONE=/developer/apache-tomcat-7.0.73
-
配置字符集
//编辑/conf/server.xml 加上URIEncoding,截取如下: port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
-
验证tomcat
注意可能本机访问不了虚拟机的8080端口,可以参考https://blog.csdn.net/huihui870311/article/details/73496766解决
bin目录执行./startup.sh 访问:http://虚拟机ip:8080
安装MAVEN
-
下载安装包,解压
-
配置环境变量
export MAVEN_HOME=/developer/apache-maven-3.0.5 export PATH=JAVA_HOME/bin:MAVEN_HOME/bin:$PATH
-
验证:
source /etc/profile
mvn -version
安装vsftpd
-
执行 yum -y install vsftpd,可以通过rpm -qa| grep vsftpd检查是否已经安装
-
创建虚拟用户
创建文件夹:mkdir ftpfile
创建ftp用户:useradd ftpuser -d /ftpfile/ -s /sbin/nologin
修改权限:chown -R ftpuser.ftpuser /ftpfile/
修改密码:passwd ftpuser 这里改成guan
创建文件:在ftpfile中创建一个index.html 并写上写说明语句
-
修改vsftpd的配置文件 参考:http://learning.happymmall.com/vsftpdconfig/;参数中配置chroot_list_file=/etc/vsftpd/chroot_list,在该目录下创建chroot_list文件,并添加用户名ftpuser。
相关配置解释可以参考:https://blog.csdn.net/bluishglc/article/details/42398811
-
配置完后 service vsftpd restart
-
编辑iptables添加我们支持的端口
# vsftp -A INPUT -p TCP --dport 61001:62000 -j ACCEPT -A OUTPUT -p TCP --sport 61001:62000 -j ACCEPT -A INPUT -p TCP --dport 20 -j ACCEPT -A OUTPUT -p TCP --sport 20 -j ACCEPT -A INPUT -p TCP --dport 21 -j ACCEPT -A OUTPUT -p TCP --sport 21 -j ACCEPT
然后重启防火墙:service iptables restart
-
解决文件不显示的问题:https://blog.csdn.net/qq_29924689/article/details/77141133
-
如果安装了ftp的客户端,也可以通过ftp命令访问文件
安装nginx
-
安装GCC:yum instal gcc-c++
安装pcre:yum install pcre-devel
安装zlib:yum install zlib zlib-devel
安装openssl:yum install openssl openssl-devel
以上可以放在一个命令执行
-
下载nginx的包,解压后进入目录,执行:./configure
会有error,可以忽略
-
分别执行make和make install
-
通过whereis nginx找到安装目录
-
进入安装目录:/usr/local/nginx/sbin,执行./nginx, 通过ps aux | grep nginx 发现nginx已经启动,其他的命令:
nginx -t 测试配置文件
nginx -s stop或者nginx -s quit 退出
nginx -s reload 重启
kill -HUP nginx的进程号 平滑重启
-
在虚拟机中直接输入localhost就能够看到nginx的访问页面,本地也可以方位虚拟机的ip来访问nginx页面,如果访问不了,参考前面访问不了tomcat8080端口的问题
-
在nginx的配置文件中加入:include vhost/*.conf,加载所有的配置文件
-
这里由于没有服务器,所以采用虚拟机域名来模拟,编辑/etc/hosts文件,添加:
#centos 172.16.175.137 www.imooc.com 172.16.175.137 image.imooc.com 172.16.175.137 s.imooc.com
-
配置nginx转发到tomcat页面:在conf目录下创建vhost目录,以上面的域名为名称,添加名称.conf文件
server { listen 80; autoindex on; server_name www.imooc.com; access_log /usr/local/nginx/logs/access.log combined; index index.html index.htm index.jsp index.php; #error_page 404 /404.html; if ( $query_string ~* ".*[\;'\<\>].*" ){ return 404; } location / { proxy_pass http://127.0.0.1:8080; add_header Access-Control-Allow-Origin *; } }
重启nginx,在虚拟机中输入www.imooc.com 会链接到配置文件中配置的tomcat页面
-
配置nginx转发到文件夹:
server {
listen 80;
autoindex off;
server_name image.imooc.com;
access_log /usr/local/nginx/logs/access.log combined;
index index.html index.htm index.jsp index.php;
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
location ~ /(mmall_fe|mmall_admin_fe)/dist/view/* {
deny all;
}
location / {
root /ftpfile/;
add_header Access-Control-Allow-Origin *;
}
}
这里指向的是ftpfile目录,这样我们可以通过image.imooc.com/1.png访问该目录下的文件
autoindex是自动创建索引,也就列出目录下的文件,不需要的应该关掉,可能会被穷举,关掉的话再访问会显式403
安装mysql
yum -y install mysql-server
默认配置在/etc/my.cnf中,打开该文件,添加字符集配置:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#下面是添加的
# default-character-set=utf8 老版本适用
character-set-server=utf8
打开mysql重启启动,显示2-5是on的话就ok了
[root@guanhang bin]# chkconfig mysqld on
[root@guanhang bin]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
启动mysql的服务(最好给虚拟机用户配上hosts):
service mysqld start或者 /etc/rc/d/init.d.mysqld start
初始化环境配置:
mysql -u root 第一次不用输入密码
配置:
1. 查看用户:select user,host,password from mysql.user;显示如下:
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| | guanhang |
| root | guanhang |
| | localhost |
| root | localhost |
+------+-----------+
其中,左侧不显示的行为匿名用户
2. 为了安全考虑,删除匿名用户:delete form mysql.user where user='';
使生效:flush privileges;
3. 防火墙添加配置:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
4. 修改root密码:set password for root@localhost=password('yourpassword'),@后面的ip是网络限制
exit退出mysql
再次重新登录就要输入:mysql -u root -p
插入用户:
insert into mysql.user(Host,User,Password) values("localhost","mmall",password("guan"));
刷新生效:flush privileges;
创建需要的database:
CREATE DATABASE `mmall` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
查看表的权限:
select * from mysql.user \G
给本地用户赋予所有的权限:
grant all privileges on mmall.* to username@localhost identified by 'password';
//示例,guan是密码,
grant all privileges on *.* to mmall@'%' identified by 'guan' with grant option;
给账号开通外网所有权限:
grant all privileges on mmal.* to 'username'@'%' identified by 'passowrd';
%表示不限制ip
也可以细化权限:
grant select,insert,upadate om mmall.* to username@'ip' identified by 'password';
安装GIT
直接yum install git,然后进行配置:
git config --global user.name "guanhang"
git config --global user.email "guanhang89@163.com"
git config --global core.autocrlf false
# 避免status乱码
git config --global core.quotepath off
生成ssh key:
ssh-keygen -t rsa -C "guanhang89@163.com"
ssh-add ~/.ssh/id_rsa 如果报错:Could not open a connection to your authentication agent. 先输入ssh-agent bash或者eval `ssh-agent`再输入这个命令
项目开发
表结构
创建表
User表
CREATE TABLE `mmall_user` (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',
`username` VARCHAR (50) NOT NULL COMMENT '用户名',
`password` VARCHAR (50) NOT NULL COMMENT '用户密码,MD5加密',
`email` VARCHAR (50) DEFAULT NULL,
`phone` VARCHAR (20) DEFAULT NULL,
`question` VARCHAR (100) DEFAULT NULL COMMENT '找回密码问题',
`answer` VARCHAR (100) DEFAULT NULL COMMENT '找回密码答案',
`role` INT (4) NOT NULL COMMENT '角色0-管理员,1-普通用户',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`update_time` DATETIME NOT NULL COMMENT '最后一次更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `user_name_unique` (`username`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 21 DEFAULT CHARSET = utf8
Category表
CREATE TABLE `mmall_category` (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '类别id',
`parent_id` INT (11) DEFAULT NULL COMMENT '父类别id当id=0时说明是根节点,一级类别',
`name` VARCHAR (50) DEFAULT NULL COMMENT '类别名称',
`status` TINYINT (1) DEFAULT '1' COMMENT '类别状态1-正常,2-已废弃',
`sort_order` INT (4) DEFAULT NULL COMMENT '排序编号,同类展示顺序,数值相同则自然排序',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 100032 DEFAULT CHARSET = utf8
购物车表:
CREATE TABLE `mmall_cart` (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '购物车id',
`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 COMMENT '是否选择,1=已勾选,0=未勾选',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `user_id_index` (`user_id`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 121 DEFAULT CHARSET = utf8
支付信息表:
CREATE TABLE `mmall_pay_info` (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '支付id',
`user_id` INT (11) DEFAULT NULL COMMENT '用户id',
`order_no` BIGINT (20) DEFAULT NULL COMMENT '订单号',
`pay_platform` INT (10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信',
`platform_number` VARCHAR (200) DEFAULT NULL COMMENT '支付宝支付流水号',
`platform_status` VARCHAR (20) DEFAULT NULL COMMENT '支付宝支付状态',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 53 DEFAULT CHARSET = utf8
订单表:
CREATE TABLE `mmall_order` (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`order_no` BIGINT (20) DEFAULT NULL COMMENT '订单号',
`user_id` INT (11) DEFAULT NULL COMMENT '用户id',
`shipping_id` INT (11) DEFAULT NULL,
`payment` DECIMAL (20, 2) DEFAULT NULL COMMENT '实际付款金额,单位是元,保留两位小数',
`payment_type` INT (4) DEFAULT NULL COMMENT '支付类型,1-在线支付',
`postage` INT (10) DEFAULT NULL COMMENT '运费,单位是元',
`status` INT (10) DEFAULT NULL COMMENT '订单状态:0-已取消,10-未付款,20-已付款,40-已发货,50-交易成功,60-交易关闭',
`payment_time` DATETIME DEFAULT NULL COMMENT '支付时间',
`send_time` DATETIME DEFAULT NULL COMMENT '发货时间',
`end_time` DATETIME DEFAULT NULL COMMENT '交易完成时间',
`close_time` DATETIME DEFAULT NULL COMMENT '交易关闭时间',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `order_no_index` (`order_no`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 103 DEFAULT CHARSET = utf8
订单明细表:
CREATE TABLE `mmall_order_item` (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '订单字表id',
`user_id` INT (11) DEFAULT NULL COMMENT '用户id',
`order_no` BIGINT (20) DEFAULT NULL COMMENT '订单号',
`product_id` INT (11) DEFAULT NULL COMMENT '商品id',
`product_name` VARCHAR (100) DEFAULT NULL COMMENT '商品名称',
`product_image` VARCHAR (500) DEFAULT NULL COMMENT '商品图片地址',
`current_unit_price` DECIMAL (20, 2) DEFAULT NULL COMMENT '生成订单时的商品单价,单位是元,保留两位小数',
`quantity` INT (10) DEFAULT NULL COMMENT '商品数量',
`total_price` DECIMAL (20, 2) DEFAULT NULL COMMENT '商品单价,单位是元,保留两位小数',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `order_no_index` (`order_no`) USING BTREE,
KEY `order_no_user_id_index` (`user_id`, `order_no`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 113 DEFAULT CHARSET = utf8
收获地址:
CREATE TABLE `mmall_shipping` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
`user_id` INT (11) DEFAULT NULL COMMENT '用户id',
`receiver_name` VARCHAR (20) DEFAULT NULL COMMENT '收货姓名',
`receiver_phone` VARCHAR (20) DEFAULT NULL COMMENT '收货固定电话',
`receiver_mobile` VARCHAR (20) DEFAULT NULL COMMENT '收货移动电话',
`receiver_province` VARCHAR (20) DEFAULT NULL COMMENT '省份',
`receiver_city` VARCHAR (20) DEFAULT NULL COMMENT '城市',
`receiver_district` VARCHAR (20) DEFAULT NULL COMMENT '区/县',
`receiver_address` VARCHAR (200) DEFAULT NULL COMMENT '详细地址',
`receiver_zip` VARCHAR (6) DEFAULT NULL COMMENT '邮编',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 32 DEFAULT CHARSET = utf8
预置数据
参见ftp中的mmall.sql
环境、配置准备
GIT
基于master分支创建新的分支:
git checkout -b v1.0 origin/master
然后push到远程:
git push origin HEAD -u
如果远程没有本地的分支,使用:
git push --set-upstream origin master
mybatis
在使用mybatis-generator,可能遇到在插件中看不到该插件,解决方法:https://blog.csdn.net/liupeifeng3514/article/details/80236827
配置项目自动编译:在IDEA的compiler中设置,下面会出现problem窗口,实时查看问题
非maven jar包引入
引入非maven jar包的依赖,可能会导致编译问题,需要在pom中添加类似配置:
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- geelynote maven的核心插件之-complier插件默认只支持编译Java 1.4,因此需要加上支持高版本jre的配置,在pom.xml里面加上 增加编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</pluginManagement>
开发概要
横向越权和纵向越权
横向越权:攻击者尝试访问与他拥有相同权限的用户的资源
纵向越权:低级别攻击者尝试访问高级别用户的资源
支付部分
####支付宝相关的网址
沙箱登录:https://openhome.alipay.com/platform/appDaily.htm
沙箱环境使用说明:https://doc.open.alipay.com/doc2/detail.htm?treeId=200&articleId=105311&docType=1
如何使用沙箱环境:https://support.open.alipay.com/support/hotProblemDetail.htm?spm=a219a.7386793.0.0.uS5uZ6&id=251932&tagId=100248
当面付产品介绍:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.hV5Clx&treeId=193&articleId=105072&docType=1
扫码支付接入指引:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Ia6Wqy&treeId=193&articleId=106078&docType=1
当面付快速接入:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.bROnXf&treeId=193&articleId=105170&docType=1
当面付接入必读:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.hV5Clx&treeId=193&articleId=105322&docType=1
当面付进阶功能:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.YFmkxI&treeId=193&articleId=105190&docType=1
当面付异步通知-仅用于扫码支付:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.BykVSR&treeId=193&articleId=103296&docType=1
当面付SDK&DEMO:https://support.open.alipay.com/docs/doc.htm?spm=a219a.7386797.0.0.k0rwWc&treeId=193&articleId=105201&docType=1
服务端SDK:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
生成RSA密钥:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=105971&docType=1
线上创建应用说明:https://doc.open.alipay.com/doc2/detail.htm?treeId=200&articleId=105310&docType=1#s0
内网穿透软件
https://natapp.cn
远程debug
在catalina.sh中添加远程debug命令
代码
详见:电商demo