Second kill system learning
一、登陆 1.1 表结构的设计
DROP TABLE IF EXISTS `miaosha_user`;
CREATE TABLE `miaosha_user` (`id` bigint(20) NOT NULL COMMENT '用户ID,手机号码',`nickname` varchar(255) NOT NULL COMMENT '用户昵称',`password` varchar(32) DEFAULT NULL COMMENT 'MD5(MD5(pass明文+固定salt) + salt)',`salt` varchar(10) DEFAULT NULL,`head` varchar(128) DEFAULT NULL COMMENT '头像,云存储的ID',`register_date` datetime DEFAULT NULL COMMENT '注册时间',`last_login_date` datetime DEFAULT NULL COMMENT '上蔟登录时间',`login_count` int(11) DEFAULT '0' COMMENT '登录次数',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
复制代码
1.2 两次md5的实现
原理: 将明文密码进行第一次md5加密(加固定盐值) 以后在网络中进行传输没,服务端拿到的是表单密码,将表单密码进行第二次加密成dbPassword,根据用户输出的userId查得user对象,进行密码匹配。 好处:1. 可以避免明文密码直接在网络中传输,减少安全风险;2. 及时用户获取db中存储得密码,也是用户密码进行二次md5加密后得结果(第一次加密固定盐值,第二次加密生成一个随即得盐值),无法直接反查彩虹表得到明文密码,进一步提高了用户登陆得安全系数。
public final static String salt = "d1o2n3g4j5u";/*** 第一次MD5* 对用户输入的密码进行加盐值然后进行MD5加密,加密后的密码是(进行网络传输时展示的密码)** @param inputPass* @return*/
public static String inputPassToFormPass(String inputPass) {String data = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);return md5(data);
}/*** 第二次MD5* 表单密码转换成数据库密码,dbPass是db中存储的密码** @param formPass* @param dbSalt 这个盐值是随即生成的,保存到db当中* @return*/
public static String formPassToDbPass(String formPass, String dbSalt) {String data = dbSalt.charAt(1) + dbSalt.charAt(0) + formPass + dbSalt.charAt(4) + dbSalt.charAt(5);return md5(data);
}/*** 输入的密码直接转换成数据库密码** @param inputPass* @param dbSalt* @return*/
public static String inputPassToDbPass(String inputPass, String dbSalt) {String formPass = inputPassToFormPass(inputPass);return formPassToDbPass(formPass, dbSalt);
}/*** MD5* 对传入的字符串进行加密然后返回加密结果。** @param data* @return*/
public static String md5(String data) // 相关的maven依赖
<!--MD5加密依赖-->
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.6</version>
</dependency>
复制代码
1.3 用户登陆参数校验
(1)构建客户端登陆请求参数对象loginDTO
(2) 给loginDTO中的相应对象加上常用的校验注解
(3) 自定义手机号校验注解并注解到loginDTO对象的mobole参数上
(4) controller层的loginDTO参数加上@Vaild注解
自定义@mobile注解进行手机号参数校验
[
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;/*** Created by chenxiong on 18/12/4.*/
@Documented
@Target(value = {ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {MobileConstraintValidator.class})
public @interface IsMobile {boolean required() default true;String message() default "手机号码格式错误";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}
][
import org.apache.commons.lang.StringUtils;import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.ConstraintViolation;/*** Created by chenxiong on 18/12/4.* 使用@Constraint注解需要自定义一个实现ConstraintValidator接口的校验类。* 注解@Constraint注解在自定义注解@a上,@a注解在类B上* 若类B的作为参数并被@Valid注解所注解,哪么将会调用如下的initialize()和isValid()方法进行参数校验*/
public class MobileConstraintValidator implements ConstraintValidator<IsMobile,String> {private boolean required = false;@Overridepublic void initialize(IsMobile isMobileAnnotation) {required = isMobileAnnotation.required();}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {if (required == false || StringUtils.isEmpty(value)){return true;}else {return ValidatorUtil.isMobile(value);}}
}
][
import org.apache.commons.lang.StringUtils;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** Created by chenxiong on 18/12/4.* 校验工具类*/
public class ValidatorUtil {// 1开头,接十位数字private static final Pattern mobile_pattern = Pattern.compile("1\\d{10}");/*** 简单校验手机号码是否合法** @param mobileNum* @return*/public static boolean isMobile(String mobileNum){if (StringUtils.isEmpty(mobileNum)){return false;}Matcher matcher = mobile_pattern.matcher(mobileNum);return matcher.matches();}
}]
复制代码
Second kill system learning相关推荐
- Machine Learning week 9 quiz: programming assignment-Anomaly Detection and Recommender Systems
一.ex8.m %% Machine Learning Online Class % Exercise 8 | Anomaly Detection and Collaborative Filterin ...
- Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话
声明: 仅用于测试环境方便调试,不可能应用于生产环境:故请勿加入到程序源代码来实现自动杀进程. 只需一个参数,就能kill用户自己的会话,请小心操作,以免误kill进程. 使用方法: 新开一个sess ...
- android kill() 头文件,kill()
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! kill()是一个计算机编程语言函数,Kill函数可以对进程发送signal(); 在linux里使用的Kill命令.实际上是 ...
- c# dbgrid数据导出到xlsx和ini中实例
界面如下: 导出选择 为xlsx或者ini模式 1.导出ini模式 ,我这里是一次导出3个grid的数据. string filename = dlg.FileName; string fi ...
- Zookeeper分布式一致性原理(七):Curator客户端
1. Curator简介 Curator是Netfix公司开源的一套Zookeeper客户端.Curator解决了很多Zookeeper客户端非常底层的细节开发工作,包括重连.反复注册Watcher和 ...
- C语言实现小时候经常做的智力测试题
下面的是两道面试题,小时候经常会看到这种类似的题目,但是用C语言实现,确实没那么容易想到,尤其是对我这种接触C语言仅仅一年的新人. 话不多说, 先上题........... 1. 5位运动员参加了10 ...
- Linux Signals 进程信号简介
2019独角兽企业重金招聘Python工程师标准>>> 在Linux中,signal是一种局限较强的进程间通信方式. 主要有三种类型: 1. 从hardware signal到POS ...
- 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- 我不知道的事——深克隆和浅克隆
推荐一部好电影<致命魔术>.(此处为植入广告) 推荐理由:涉及人性.画面不错,剧情跌宕,亦魔亦幻(此处的"魔"为魔术的"魔").虽然女 ...
- C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)
上次写了一个用文件流方式将Datatable导出Excel的方法,这个方法有局限性,比如没法对Excel进行一些增加列颜色等简单的操作,现在,给大家介绍另外一种方法,用微软的Excel类.既然要用到类 ...
最新文章
- ios自动布局(1)
- 一套简约漂亮的响应式博客园主题皮肤分享给你们(一)
- STM32启动文件详解及SystemInit函数分析
- Java锁 (概览)
- Java在生活中的应用盘点!
- 教你制作U盘,内存卡,硬盘等等等的漂亮背景
- 关于计算机的英语演讲稿三分钟,以计算机为题的英语演讲稿5
- 报名已近500人丨基于AWR/ASH故障分析案例分享
- 如何计算机械能的变化量,问:如何计算机械能变化量?
- 第U题:Java BigDecimal解决··Noder现在上初三了,正在开始复习中考。他每天要计算型如..............
- UNICODE与ASCII码的关系(MTK)
- nginx linux脚本,控制 nginx shell脚本语言
- python花瓣网_花瓣网花瓣爬虫
- 算法导论———归并排序(JAVA、Python)
- 制作自己专属的抓包工具
- m3u8格式转MP4(ffmpeg方法)
- 大气幼儿园html模板,幼儿园儿童HTML主题
- foxmail发邮件时总提示接收密码错误是怎么回事
- 厉害了,Python也能使用动态链接库
- 云渲染最全计费规则合集
热门文章
- root用户改动普通用户文件
- David Cutler,VMS和Windows NT的首席设计师 (zz.is2120)
- gdb在cygwin下的安装
- 加入域报错(找不到网络路径)
- Matlab将double类型转换为正整数类型
- ENVI实验教程(7)实验七、遥感影像变化检测
- C++ error C3867 请使用 ““ 来创建指向成员的指针
- 仿淘宝验证码 php,PHP中仿制 ecshop验证码实例
- JavaSE学习--HTML
- php检测手机是否开飞行模式,Android_android 如何判断当前是否为飞行模式,Android中如何判断系统当前是否 - phpStudy...