實現使用者名稱、郵箱、手機號三種都可以登入
登入會員名區分大小寫,郵箱不區分大小寫:
使用者名稱 手機號存在了 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") @ResponseBodyString sessionCode = String.valueOf(sessionpublic String loginCheck(User u,String code, HttpServletResponse response, HttpSession session) { log.info("使用者登入操作start!"); //驗證 驗證碼
.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();
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>