电商后端demo((linux软件安装))

电商后端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
  1. 删除自带JDK:

    rpm -qa | grep jdk
    sudo yum remove 上面查询出来的软件
    
  2. 上传rpm包,修改权限为777

    也可以使用:wget 下载链接来下载

  3. 安装:

    sudo rpm -ivh jdk-7u80-linux-32bit.rpm
    默认的安装路径:/usr/java下
    
  4. 配置环境变量

    在 /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
  1. 安装tomcat之前需要装JDK, 这里用的tomcat7

  2. 下载gz包,然后tar -zxvf 解压,这里放在的目录是/developer/apache-tomcat-7.0.73

  3. 配置环境变量,同样是profile文件:

    export CATALINA_HONE=/developer/apache-tomcat-7.0.73
    
  4. 配置字符集

    //编辑/conf/server.xml 加上URIEncoding,截取如下:
    port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" URIEncoding="UTF-8"/>
    
  5. 验证tomcat

    注意可能本机访问不了虚拟机的8080端口,可以参考https://blog.csdn.net/huihui870311/article/details/73496766解决

    bin目录执行./startup.sh
    访问:http://虚拟机ip:8080
    
安装MAVEN
  1. 下载安装包,解压

  2. 配置环境变量

    export MAVEN_HOME=/developer/apache-maven-3.0.5
    
    export PATH=JAVA_HOME/bin:MAVEN_HOME/bin:$PATH
    
  3. 验证:

    source /etc/profile

    mvn -version

安装vsftpd
  1. 执行 yum -y install vsftpd,可以通过rpm -qa| grep vsftpd检查是否已经安装

  2. 创建虚拟用户

    创建文件夹:mkdir ftpfile

    创建ftp用户:useradd ftpuser -d /ftpfile/ -s /sbin/nologin

    修改权限:chown -R ftpuser.ftpuser /ftpfile/

    修改密码:passwd ftpuser 这里改成guan

    创建文件:在ftpfile中创建一个index.html 并写上写说明语句

  3. 修改vsftpd的配置文件 参考:http://learning.happymmall.com/vsftpdconfig/;参数中配置chroot_list_file=/etc/vsftpd/chroot_list,在该目录下创建chroot_list文件,并添加用户名ftpuser。

    相关配置解释可以参考:https://blog.csdn.net/bluishglc/article/details/42398811

  4. 配置完后 service vsftpd restart

  5. 编辑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

  6. 解决文件不显示的问题:https://blog.csdn.net/qq_29924689/article/details/77141133

  7. 如果安装了ftp的客户端,也可以通过ftp命令访问文件

安装nginx
  1. 安装GCC:yum instal gcc-c++

    安装pcre:yum install pcre-devel

    安装zlib:yum install zlib zlib-devel

    安装openssl:yum install openssl openssl-devel

    以上可以放在一个命令执行

  2. 下载nginx的包,解压后进入目录,执行:./configure

    会有error,可以忽略

  3. 分别执行make和make install

  4. 通过whereis nginx找到安装目录

  5. 进入安装目录:/usr/local/nginx/sbin,执行./nginx, 通过ps aux | grep nginx 发现nginx已经启动,其他的命令:

    nginx -t 测试配置文件

    nginx -s stop或者nginx -s quit 退出

    nginx -s reload 重启

    kill -HUP nginx的进程号 平滑重启

  6. 在虚拟机中直接输入localhost就能够看到nginx的访问页面,本地也可以方位虚拟机的ip来访问nginx页面,如果访问不了,参考前面访问不了tomcat8080端口的问题

  7. 在nginx的配置文件中加入:include vhost/*.conf,加载所有的配置文件

  8. 这里由于没有服务器,所以采用虚拟机域名来模拟,编辑/etc/hosts文件,添加:

    #centos
    172.16.175.137 www.imooc.com
    172.16.175.137 image.imooc.com
    172.16.175.137 s.imooc.com
    
  9. 配置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页面

  10. 配置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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值