//封装类Util代码
package com.co.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.co.model.User;
public class LoginUtil {
// 登录
public static Map<String, Integer> login(String username, String password, String checkCode, HttpSession session,User user) {
Map<String, Integer> map = new HashMap<String, Integer>();
// 从seeion中获取系统生产的验证码
String code = (String) session.getAttribute("checkCode");
if (checkCode.equals(code)) {
// 根据用户输入的用户进行查询
if (user != null) {
// 拿用户输入的密码跟数据库中的密码进行比较
if (MD5Util.verify(MD5Util.md5Hex(password), user.getPassword())) {
map.put("state", 4); // 登录成功
session.setAttribute("User", user); // 登录成功之后将用户信息放到session中
} else {
map.put("state", 3); // 密码错误
}
} else {
map.put("state", 2); // 用户不存在
}
} else {
map.put("state", 1); // 验证码错误
}
return map;
}
// 注册
public static String register(User user, String checkCode, HttpSession session) {
// 获取验证码
Object attribute = session.getAttribute("checkCode");
// 判断验证码错误或为null 返回 在页面进行弹框提示
if (attribute == null || !checkCode.equals(session.getAttribute("checkCode").toString())) {
return "ss";
}
user.setPassword(MD5Util.generate(MD5Util.md5Hex(user.getPassword())));
return "success";
}
// 修改密码
public static String updatePassword(String oldPassword, String newPassword, HttpSession session) {
try {
User user = (User) session.getAttribute("User");
if (MD5Util.verify(MD5Util.md5Hex(oldPassword), user.getPassword())) {
user.setPassword(MD5Util.generate(MD5Util.md5Hex(newPassword)));
}
return "state";
} catch (Exception e) {
System.out.println(e);
return "statee";
}
}
// 校验验证码
public static Map<String, Object> checkCode(String checkCode, HttpSession session) {
Map<String, Object> map = new HashMap<String, Object>();
// 系统生成的验证码
String code = (String) session.getAttribute("checkCode");
if (code.equals(checkCode)) {
map.put("valid", true);
} else {
map.put("valid", false);
}
return map;
}
// 注销
public static String logout(HttpSession session) {
// 清空session
session.invalidate();
return "redirect:/index.jsp";
}
// 找回密码
public static Map<String, Object> forgetPassword(String username, String email, User user) {
Map<String, Object> map = new HashMap<String, Object>();
// 生产随机密码
String newPassword = RandomStringUtils.random(6,"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
user.setPassword(MD5Util.generate(MD5Util.md5Hex(newPassword)));
map.put("state", true);
MailUtil.sendMail("天涯平台系统通知", "您的新密码为:" + newPassword + ",请及时登录,修改密码", user.getEmail());
return map;
}
// 注册时验证用户是否存在
public static Map<String, Object> queryUserByUsername(String username, User user) {
Map<String, Object> map = new HashMap<String, Object>();
if (user == null) {
map.put("valid", true);
} else {
map.put("valid", false);
}
return map;
}
// 找回密码验证用户是否存在
public static Map<String, Object> queryUserByUsername2(String username1, User user) {
Map<String, Object> map = new HashMap<String, Object>();
if (user != null) {
map.put("valid", true);
} else {
map.put("valid", false);
}
return map;
}
}
//controller控制器调用
package com.co.controller;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.co.model.permission.Permission;
import com.co.model.user.User;
import com.co.service.PermissionService;
import com.co.service.UserService;
import com.co.util.LoginUtil;
import com.co.util.MD5Util;
import com.co.util.MailUtil;
@Controller
@RequestMapping("user")
public class UserLoginController {
@Autowired
private UserService userService;
@Autowired
private PermissionService permissionService;
// 跳转
@RequestMapping("home")
private String home() {
return "home";
}
// 登录 没有逻辑基础版
/*@RequestMapping("login")
@ResponseBody
public Map<String, Integer> login(String username, String password, String checkCode, HttpSession session) {
User user = userService.queryUserByUserName(username);
return LoginUtil.login(username, password, checkCode, session, user);
}*/
//登录 逻辑基础版
@RequestMapping("login")
@ResponseBody
public Map<String, Integer> login(String username, String password, String checkCode, HttpSession session) {
Map<String, Integer> map = new HashMap<String, Integer>();
// 从session获取验证码
String code = (String) session.getAttribute("checkCode");
if (checkCode.equals(code)) {
// 根据用户输入的用户进行查询
User user = userService.queryUserByUserName(username);
if (user != null) {
// 解锁账号
if (user.getErrorCount() != null && user.getErrorCount() >= 3) {
// 获取账号锁定时间的第二天的凌晨时间
Calendar c = Calendar.getInstance();
c.setTime(user.getErrorTime());
c.add(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
if (System.currentTimeMillis() >= c.getTimeInMillis()) {
user.setErrorCount(0);
user.setErrorTime(null);
userService.addUser(user);
}
}
// 判断用户是否锁定
if (user.getErrorCount() == null || user.getErrorCount() < 3) {
// 拿用户输入的密码跟数据库中的密码进行比较
if (MD5Util.verify(MD5Util.md5Hex(password), user.getPassword())) {
// 判断是否为第一次登录,获取跟当前时间是不是同一天
if (user.getLoginCount() == null
|| DateUtils.isSameDay(user.getLoginTime(), new Date()) == false) {
user.setLoginCount(1);
} else {
user.setLoginCount(user.getLoginCount() + 1);
}
// 设置登录时间
user.setLoginTime(new Date());
userService.addUser(user);
map.put("state", 4); // 登录成功
session.setAttribute("User", user); // 登录成功之后将用户信息放到session中
// 获取该用户的权限菜单
List<Permission> permissions = permissionService.queryPermissionByUserId(user.getUserId());
session.setAttribute("permissions", permissions);
} else {
// 记录错误次数
user.setErrorCount(user.getErrorCount() == null ? 1 : user.getErrorCount() + 1);
user.setErrorTime(new Date());
userService.addUser(user);
// 账户被锁定时发送邮件
if (user.getErrorCount() >= 3) {
MailUtil.sendMail("希望电影平台系统通知", "您的账号已被锁定,请明日重试!", user.getEmail());
}
map.put("state", 3); // 密码错误
}
} else {
map.put("state", 5); // 账号被锁定
}
} else {
map.put("state", 2); // 用户不存在
}
} else {
map.put("state", 1); // 验证码错误
}
return map;
}
// 注销
@RequestMapping("logout")
public String logout(HttpSession session) {
return LoginUtil.logout(session);
}
// 注册
@RequestMapping("register")
@ResponseBody
public String register(User user, String checkCode, HttpSession session) {
LoginUtil.register(user, checkCode, session);
userService.addUser(user);
return "success";
}
// 校验验证码
@RequestMapping("checkCode")
@ResponseBody
public Map<String, Object> checkCode(String checkCode, HttpSession session) {
return LoginUtil.checkCode(checkCode, session);
}
// 修改密码
@RequestMapping("updatePassword")
@ResponseBody
public Integer updatePassword(String oldPassword, String newPassword, HttpSession session) {
User user = (User) session.getAttribute("User");
LoginUtil.updatePassword(oldPassword, newPassword, session);
userService.addUser(user);
return 0;
}
// 找回密码
@RequestMapping("forgetPassword")
@ResponseBody
public Map<String, Object> forgetPassword(String username, String email) {
Map<String, Object> map = new HashMap<String, Object>();
User user = userService.queryUserByUserName(username);
LoginUtil.forgetPassword(username, email, user);
userService.addUser(user);
map.put("state", true);
return map;
}
// 验证用户是否存在
@RequestMapping("queryUserByUsername")
@ResponseBody
public Map<String, Object> queryUserByUsername(String username) {
User user = userService.queryUserByUserName(username);
return LoginUtil.queryUserByUsername(username, user);
}
// 找回密码验证用户是否存在
@RequestMapping("queryUserByUsername2")
@ResponseBody
public Map<String, Object> queryUserByUsername2(String username1) {
User user = userService.queryUserByUserName(username1);
return LoginUtil.queryUserByUsername2(username1, user);
}
// // 验证用户是否存在验证邮箱
@RequestMapping("checkEmail")
@ResponseBody
public Map<String, Object> checkEmail(String username, String userEmail1) {
User user = userService.queryUserByUserName(username);
return LoginUtil.checkEmail(username, userEmail1, user);
}
}