2018-12-08 登录功能(上)
2018-12-08 本文已影响0人
培根好吃
1.手机号校验
利用
手机号校验
public class ValidatorUtil {
private static final Pattern mobile_pattern=Pattern.compile("1\\d{10}");
public static boolean isMobile(String src) {
if(StringUtils.isEmpty(src)) {
return false;
}
Matcher m=mobile_pattern.matcher(src);
return m.matches();
}
public static void main(String[] args) {
System.out.println(isMobile("15757855000"));
System.out.println(isMobile("157578550sfsg"));
}
}
2.在templates里面建login.html页面
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>登录</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- jquery -->
<script type="text/javascript" th:src="@{/js/jquery.min.js}"></script>
<!-- bootstrap -->
<link rel="stylesheet" type="text/css" th:href="@{/bootstrap/css/bootstrap.min.css}" />
<script type="text/javascript" th:src="@{/bootstrap/js/bootstrap.min.js}"></script>
<!-- jquery-validator -->
<script type="text/javascript" th:src="@{/jquery-validation/jquery.validate.min.js}"></script>
<script type="text/javascript" th:src="@{/jquery-validation/localization/messages_zh.min.js}"></script>
<!-- layer 弹框-->
<script type="text/javascript" th:src="@{/layer/layer.js}"></script>
<!-- md5.js -->
<script type="text/javascript" th:src="@{/js/md5.min.js}"></script>
<!-- common.js 展示loading框, 固定salt-->
<script type="text/javascript" th:src="@{/js/common.js}"></script>
</head>
<body>
<form name="loginForm" id="loginForm" method="post" style="width:50%; margin:0 auto">
<h2 style="text-align:center; margin-bottom: 20px">用户登录</h2>
<div class="form-group">
<div class="row">
<label class="form-label col-md-4">请输入手机号码</label>
<div class="col-md-5">
<input id="mobile" name = "mobile" class="form-control" type="text" placeholder="手机号码" required="true" minlength="11" maxlength="11" />
</div>
<div class="col-md-1">
</div>
</div>
</div>
<div class="form-group">
<div class="row">
<label class="form-label col-md-4">请输入密码</label>
<div class="col-md-5">
<input id="password" name="password" class="form-control" type="password" placeholder="密码" required="true" minlength="6" maxlength="16" />
</div>
</div>
</div>
<div class="row">
<div class="col-md-5">
<button class="btn btn-primary btn-block" type="reset" onclick="reset()">重置</button>
</div>
<div class="col-md-5">
<button class="btn btn-primary btn-block" type="submit" onclick="login()">登录</button>
</div>
</div>
</form>
</body>
<script>
function login(){
$("#loginForm").validate({
submitHandler:function(form){
doLogin();
}
});
}
function doLogin(){
g_showLoading();
var pass=$("#password").val();
var salt_fixed=g_passsword_salt;
var str=""+salt_fixed.charAt(0)+salt_fixed.charAt(2)+pass+salt_fixed.charAt(5)+salt_fixed.charAt(4);
var password=md5(str);
$ajax({
url:"/login/do_login",
type:"POST",
data:{
mobile:$("#mobile").val(),
password:password
},
success:function(data){
layer.closeAll();
if(data.code == 0){
layer.msg("成功");
window.location.href="/goods/to_list";
}else{
layer.msg(data.msg);
}
console.log(data);
},
error:function(){
}
});
}
</script>
</html>
3.将数据库的秒杀对象引入,作对比
MiaoshaUser
package com.ryan.miaosha.domain;
import java.util.Date;
public class MiaoshaUser {
private Long id;
private String nickname;
private String password;
private String salt;
private String head;
private Date registerDate;
private Date lastLoginDate;
private Integer loginCount;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
public Date getLastLoginDate() {
return lastLoginDate;
}
public void setLastLoginDate(Date lastLoginDate) {
this.lastLoginDate = lastLoginDate;
}
public Integer getLoginCount() {
return loginCount;
}
public void setLoginCount(Integer loginCount) {
this.loginCount = loginCount;
}
}
MiaoshaUserDao
package com.ryan.miaosha.dao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.ryan.miaosha.domain.MiaoshaUser;
@Mapper
public interface MiaoshaUserDao {
@Select("select * from miaosha_user where id = #{id}")
public MiaoshaUser getById(@Param("id")long id);
}
MiaoshaUserService
@Service
public class MiaoshaUserService {
//public static final String COOKI_NAME_TOKEN = "token";
@Autowired
MiaoshaUserDao miaoshaUserDao;
@Autowired
RedisService redisService;
public MiaoshaUser getById(long id) {
return miaoshaUserDao.getById(id);
}
}
public CodeMsg login(LoginVo loginVo) {
String mobile = loginVo.getMobile();
long id=Long.parseLong(mobile);
MiaoshaUser userById = getById(id);
if(userById==null) {
return CodeMsg.USER_NOT_EXIST;
}
String saltDB = userById.getSalt();
String passWEB=loginVo.getPassword();
String passValidated=MD5Util.WebPassToDB(passWEB, saltDB);
String passDB=userById.getPassword();
if(!passDB.equals(passValidated)) {
return CodeMsg.PASSWORD_ERROR;
}
return CodeMsg.SUCCESS;
}
LoginController
@Controller
@RequestMapping("/login")
public class LoginController {
private static Logger log=LoggerFactory.getLogger(LoginController.class);
@Autowired
UserService userService;
@Autowired
RedisService redisService;
@Autowired
MiaoshaUserService miaoshaUserService;
@RequestMapping("/to_login")
String tologin() {
return "login";
}
//请求成功 为什么传入loginVo 因为要接收网页表单传来的参数 将手机号和密码传入一个对象中
@RequestMapping("/do_login")
@ResponseBody
Result<Boolean> dologin(LoginVo loginVo) {
String mobile = loginVo.getMobile();
String passInput=loginVo.getPassword();
if(StringUtils.isEmpty(mobile)) {
return Result.error(CodeMsg.MOBILE_EMPTY);
}
if(!ValidatorUtil.isMobile(mobile)) {
return Result.error(CodeMsg.MOBILE_ERROR);
}
if(StringUtils.isEmpty(passInput)) {
return Result.error(CodeMsg.PASSWORD_EMPTY);
}
log.info(loginVo.toString());
//登录
CodeMsg cm = miaoshaUserService.login(loginVo);
if(cm.getCode()==0) {
return Result.success(true);
}else {
return Result.error(cm);
}
}
}
CodeMsg
package com.ryan.miaosha.domain;
public class CodeMsg {
private int code;
private String msg;
/*
* 按照模块定义CodeMsg
* */
public static CodeMsg SUCCESS=new CodeMsg(0,"SUCCESS");
public static CodeMsg SERVER_ERROR=new CodeMsg(500100,"服务器异常");
public static CodeMsg PASSWORD_EMPTY=new CodeMsg(500211,"密码为空");
public static CodeMsg MOBILE_EMPTY=new CodeMsg(500212,"手机号为空");
public static CodeMsg MOBILE_ERROR=new CodeMsg(500213,"手机号格式错误");
public static CodeMsg USER_NOT_EXIST=new CodeMsg(500214,"用户bububu不存在");
public static CodeMsg PASSWORD_ERROR=new CodeMsg(500215,"密码错误");
public CodeMsg() {
}
private CodeMsg(int code, String msg) {
this.code=code;
this.msg=msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}