1. 程式人生 > >實現使用者名稱、郵箱、手機號三種都可以登入

實現使用者名稱、郵箱、手機號三種都可以登入

登入會員名區分大小寫,郵箱不區分大小寫:

使用者名稱 手機號存在了 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")
@ResponseBody
public 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>