实现用户名、邮箱、手机号三种都可以登录

来源:互联网 发布:zimg php 编辑:程序博客网 时间:2024/05/13 21:46

登录会员名区分大小写,邮箱不区分大小写:

用户名 手机号存在了 tb_user表

邮箱存在了comm_company表

在登录时把 登录名 (username)和密码(password)带到后台,登录名可能是(用户名、邮箱、手机号)

jsp页面

 function login(){
    var username = $("#username").val();
var password = $("#password").val();
var code = $("#code_4").val();//验证码
var url = "${ctx}/login/loginCheck.action";
$.ajax({
type : "POST",
url : url,
data : {
username : username,
password : password,
code:code
},
success : function(data) {
if(data*1==-1){
layer.msg("验证码不正确!", {
icon : 7
});
changeCode();//刷新验证码
}
else{
var status = data.split("-")[0];
var msg = data.split("-")[1];
if (status == 1) {

layer.msg("登录成功", {
icon : 1
});
//登录
window.location.href="../fore/homepage/ftpage.action";
}else if(status == 0){
layer.msg("会员名不存在!", {
icon : 7
});
changeCode()
}else if(status == 2){
layer.msg("密码错误!", {
icon : 7
});
changeCode();
}else{
layer.msg("系统错误,请联系管理员!", {
icon : 3
});

}
}
}
});
    }


java后台:(前台三个值,登录名和密码用对象接收

@RequestMapping("loginCheck")@ResponseBodypublic String loginCheck(User u,String  code,HttpServletResponse response, HttpSession session) {log.info("用户登录操作start!");//验证  验证码
String sessionCode = String.valueOf(session
.getAttribute("VALIDATE_CODE"));
try {
//不知道这句什么意思
SecurityUtils.getSubject().logout();
String hashAlgorithmName = "MD5"; // 加密算法
int hashIterations = 1024; // 加密次数
Object pass = new SimpleHash(hashAlgorithmName, u.getPassword(), null,hashIterations);
String pas = pass.toString();
//判断登录名是否存在(见下面SQL)
boolean bool = userService.isExist(u);
if (bool) {
//根据登录名查询 对面登录密码
User user = userService.getUserByUME(u.getUsername());
if(user.getPassword().equals(pas)){
Subject subject = SecurityUtils.getSubject();
if (!subject.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
try {
subject.login(token);
向session中传user和company对象
subject.getSession().setAttribute("sessionUser", user);
subject.getSession().setAttribute("sessionCompany", companyService.CompanySelectByID(user.getCompanyId()));
if (!sessionCode.equals(code)) {
return "-1";
}

return "1-登录成功!";
} catch (AuthenticationException ae) {
log.info("登录失败: " + ae.getMessage());
}
}
}else{
return "2-密码错误!";
}

} else {// 用户不存在
return "0-会员名不存在!";
}
} catch (AuthenticationException e) {
e.printStackTrace();
log.error(e);
}
return "0-登录失败!";
}



SQL:

查询登录名是否存在 返回int型
   
<select id="selectCountname" parameterType="com.wpp.sys.model.po.User" resultType="int">
      SELECT COUNT(*) FROM comm_company c    INNER   JOIN tb_user u ON u.`companyId`=c.`id`
       WHERE 1=1 AND (BINARY u.username = #{username} OR c.`cpy_email` =#{username})
</select>
查询登录名和密码 返回user对象
   <select id="selectUserByUME" parameterType="java.lang.String"
     resultType="com.wpp.sys.model.po.User">
SELECT u.* FROM comm_company c    INNER   JOIN tb_user u ON u.`companyId`=c.`id`
       WHERE 1=1 AND (BINARY u.username = #{username} OR c.`cpy_email` =#{username})
   </select>









原创粉丝点击