一:登录接口
@RequestMapping("/to_login")
public String toLogin() {
return "login";
}
@RequestMapping("/do_login")
@ResponseBody
public Result<Boolean> doLogin(HttpServletResponse response, @Valid LoginVo loginVo) {
log.info(loginVo.toString());
//登录
// miaoshaUserService.login(response, loginVo);
return Result.success(true);
}
用户通过localhost:8080/login/to_login来访问登录页面,这个Controller给用户返回一个login的前端页面。
二:前端像后端传输数据
<script>
function login(){
$("#loginForm").validate({
submitHandler:function(form){
console.log("login");
doLogin();
}
});
}
function doLogin(){
g_showLoading(); // 提示框
console.log("dologin");
var inputPass = $("#password").val();
var salt = g_passsword_salt; // 1a2b3c4d
var str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
var password = md5(str);
$.ajax({
url: "/login/do_login",
type: "POST",
data:{
mobile:$("#mobile").val(),
password: password
},
success:function(data){
layer.closeAll();
console.log(data)
if(data.code == 0){
layer.msg("成功");
// window.location.href="/goods/to_list";
}else{
layer.msg(data.msg);
}
},
error:function(){
layer.closeAll();
console.log(data)
}
});
}
</script>
前端将password进行第一次MD5加密后将数据传给后端
三:检查数据格式
public class LoginVo {
@NotNull // 不能为空
@IsMobile // 检查是否是手机号格式
private String mobile;
@NotNull // 不能为空
@Length(min=32) // 限定密码长度
private String password;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginVo [mobile=" + mobile + ", password=" + password + "]";
}
}
后端通过LoginVo来检查数据格式
四:与数据库进行比较
public boolean login(HttpServletResponse response, LoginVo loginVo) {
if(loginVo == null) {
throw new GlobalException(CodeMsg.SERVER_ERROR);
}
String mobile = loginVo.getMobile();
System.out.println("start get");
String formPass = loginVo.getPassword();
//判断手机号是否存在
// System.out.println("miaoshamapper: "+miaoshaUserMapper);
MiaoshaUser user = getById(Long.parseLong(mobile));
System.out.println("end get");
// System.out.println("user: "+user);
if(user == null) {
throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
}
//验证密码
String dbPass = user.getPassword();
String saltDB = user.getSalt();
String calcPass = MD5Util.formPassToDBPass(formPass, saltDB);
// System.out.println("md5密码:"+calcPass);
// System.out.println("数据库密码:"+dbPass);
if(!calcPass.equals(dbPass)) {
throw new GlobalException(CodeMsg.PASSWORD_ERROR);
}
return true;
}
首先判断数据库中有无这个id,在比较密码是否正确
五:对象缓存
//生成cookie,来标识用户 ,将用户写道cookie中,传递给客户端,客户端再给服务端
String token = UUIDUtil.uuid();
addCookie(response, token, user); //把个人信息放到redis缓存上去
这个还没怎么整好