网上商城
- 横向越权:攻击者尝试访问与他拥有相同权限的用户的资源
- 纵向越权:低级别攻击者尝试访问高级别用户的资源 用户模块接口文档地址:用户模块
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=22 DEFAULT CHARSET=utf8;
- 如何设计及封装无限层级的树状数据结构
- 递归算法的设计思想
- 如何处理复杂对象排重
- 重写hashcode和equal的注意事项
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;
- ftp服务对接
- SpringMVC文件上传
- 流读取Properties
- 抽象POJO、BO、VO对象之间的转换关系及解决思路
- joda-time快速入门
- 静态块
- Mybatis-PageHelper高效准确的分页及动态排序
- Mybatis对List遍历的实现方法
- Mybatis对where语句动态拼装的几个版本演变
对于复杂的业务逻辑
从dao层拿到POJO对象,在service层转换成BO(business object),传到Controller层再转成VO(view object)
若业务并不复杂,POJO也是可以和VO直接通信的,此时的VO就是value-object
CREATE TABLE `mmall_product` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',
`category_id` int(11) NOT NULL COMMENT '分类id,对应mmall_category表的主键',
`name` varchar(100) NOT NULL COMMENT '商品名称',
`subtitle` varchar(200) DEFAULT NULL COMMENT '商品副标题',
`main_image` varchar(500) DEFAULT NULL COMMENT '产品主图,url相对地址',
`sub_images` text COMMENT '图片地址,json格式,扩展用',
`detail` text COMMENT '商品详情',
`price` decimal(20,2) NOT NULL COMMENT '价格,单位-元保留两位小数',
`stock` int(11) NOT NULL COMMENT '库存数量',
`status` int(6) DEFAULT '1' COMMENT '商品状态.1-在售 2-下架 3-删除',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
- 购物车模块的设计思想
- 封装一个高复用购物车核心方法
- 解决浮点型商业运算中丢失精度的问题
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 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=146 DEFAULT CHARSET=utf8;
- SpringMVC数据绑定中对象绑定
- mybatis自动生成主键、配置和使用
- 如何避免横向越权漏洞的巩固
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,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;
-
熟悉支付宝对接核心文档,调通支付宝支付功能官方Demo
1.沙箱登录
2.沙箱环境使用说明
3.当面付产品介绍
4.扫码支付接入指引
5.当面付快速接入
6.当面付接入必读
7.当面付进阶功能
8.当面付异步通知-仅用于扫码支付
9.当面付SDK&Demo
10.生成RSA密钥
11.线上创建应用说明 -
解析支付宝SDK对接源码
-
RSA1和RSA2验证签名及加解密
-
避免支付宝重复通知和数据校验
-
natapp外网穿透和tomcat remote debug
1.保持远端代码版本和本地代码保持一致
2.执行sudo vim ${tomcat}/bin/catalina.sh进行编辑
3.添加如下配置,其中address为开放远程debug的端口号- CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE - Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
4.把开放远程dubug的端口加到防火墙配置中
5.及时关闭开放的debug端口
6.编辑sudo vim /etc/sysconfig/iptables
7.添加如下配置 -A INPUT -p tcp -m tcp --dport 5005 -j ACCEPT
8.:wq保存退出
9.重启防火墙sudo service iptables restart -
生成二维码,并持久化到图片服务器
-
一些重要的官方文档
-
沙箱调试环境(测试账号)
-
支付宝扫码支付重要的字段
关键入参:参数名称 参数说明 out_trade_no 商户订单号,需要保证不重复 total_amount 订单金额 subject 订单标题 store_id 商户门店编号 timeout_express 交易超时时间 关键出参: 参数名称 参数说明 qr_code 订单二维码(有效时间2小时)的内容,开发者需要自己使用工具根据内容生成二维码图片 重要字段:
参数 参数名称 类型 必填 描述 范例 trade_status 交易状态 String(32) 否 交易目前所处的状态 TRADE_CLOSED total_amount 订单金额 Number(9,2) 否 本次交易支付的订单金额,单位为人民币(元) 20 buyer_pay_amount 付款金额 Number(9,2) 否 用户在交易中支付的金额 13.88 交易状态说明: 枚举名称 枚举说明 WAIT_BUYER_PAY 交易创建,等待买家付款 TRADE_CLOSED 未付款交易超时关闭,或支付完成后全额退款 TRADE_SUCCESS 交易支付成功 TRADE_FINISHED 交易结束,不可退款 通知触发条件: 触发条件名 触发条件描述 触发条件默认值 TRADE_FINISHED 交易完成 false(不触发通知) TRADE_SUCCESS 支付成功 true(触发通知) WAIT_BUYER_PAY 交易创建 false(不触发通知) TRADE_CLOSED 交易关闭 false(不触发通知) 支付渠道说明: 支付渠道代码 支付渠道 ALIPAYACCOUNT 支付宝余额 -
支付宝扫码支付重要细节
1.主动轮询和回调的区别
2.避免单边账
3.同步请求的加签和验证签名
4.回调的验证(签名、金额、订单号、订单状态、交易状态、商户id)
5.过滤掉重复的通知
6.一定要验证并确保可接受的异步通知是支付宝发出的 -
支付宝扫码支付对接技巧(外网联调)
- 回调请求的返回
程序执行完后必须打印输出“success”(不包含引号)。 如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。 一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)
- 路由器设置开放本地到外网(不推荐)
- 外网远程dubug
- 1 保持远端代码版本和本地代码保持一致
- 2 及时关闭开放的dubug端口
- 内网穿透(ngrok、natapp、花生壳)
- 回调请求的返回
-
支付宝扫码支付官方Demo调试
- 避免业务逻辑中横向越权和纵向越权等安全漏洞
- 设计实用、安全、扩展性强大的常量、枚举类
- 订单号生成规则、订单严谨性判断
- POJO和VO之间的实际操练
- mybatis批量插入
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=118 DEFAULT CHARSET=utf8