本案例基于SpringMVC:完整代码下载 http://download.csdn.net/detail/geek_ymv/8226963
数据库表的结构如下:
User类
package com.geekymv.model;
import java.util.Date;
public class User {
private Integer id;
private String username;
private String password;
private Integer counter;
private Date lastLoginDate;
public User() {
}
public User(String username, String password, Integer counter) {
this.username = username;
this.password = password;
this.counter = counter;
}
public User(Integer id, String username, String password, Integer counter) {
this(username, password, counter);
this.id = id;
}
public User(Integer id, String username, String password, Integer counter,
Date lastLoginDate) {
this(id, username, password, counter);
this.lastLoginDate = lastLoginDate;
}
//.......此处省略setter,getter方法
}
链接数据库的工具类,可以参见另外一篇博客:http://blog.csdn.net/geek_ymv/article/details/38726653
UserDAO接口:
package com.geekymv.dao;
import com.geekymv.model.User;
public interface UserDAO {
/**
* 根据用户名和密码查询用户
* @param username
* @param password
* @return
*/
public User query(String username, String password);
/**
* 根据用户名查询
* @param username
* @return
*/
public User queryByName(String username);
/**
* 更新用户登录次数
* @param user
*/
public void update(User user);
}
UserDAOImpl实现类:
package com.geekymv.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.geekymv.dao.UserDAO;
import com.geekymv.model.User;
import com.geekymv.util.Convert2Object;
import com.geekymv.util.DBUtil;
import com.geekymv.util.DateUtil;
@Repository("userDAO")
public class UserDAOImpl implements UserDAO {
private Convert2Object handler = new Convert2Object() {
@Override
public Object convert(ResultSet rs) {
try {
Integer id = rs.getInt("id");
String username = rs.getString("name");
String password = rs.getString("pwd");
int counter = rs.getInt("counter");
String lastLoginDate = rs.getString("login_time");
User user = new User(id, username, password, counter, DateUtil.convert2Date(lastLoginDate));
return user;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
};
@SuppressWarnings("unchecked")
@Override
public User query(String username, String password) {
String sql = "select id, name, pwd, counter, login_time from t_users where name=? and pwd=?";
List<User> users = DBUtil.queryObject(sql , handler , username, password);
if(users == null || users.size() == 0) {
return null;
}
return users.get(0);
}
@SuppressWarnings("unchecked")
@Override
public User queryByName(String username) {
String sql = "select id, name, pwd, counter, login_time from t_users where name=?";
List<User> users = DBUtil.queryObject(sql , handler , username);
if(users == null || users.size() == 0) {
return null;
}
return users.get(0);
}
@Override
public void update(User user) {
String sql = "update t_users set name=?, pwd=?, counter=?, login_time=? where id=?";
DBUtil.execute(sql, user.getUsername(), user.getPassword(),
user.getCounter(), user.getLastLoginDate(), user.getId());
}
}
UserService接口:
package com.geekymv.service;
import com.geekymv.model.MyEnum;
import com.geekymv.model.User;
public interface UserService {
/**
* 用户登录
* @param username
* @param password
* @return
*/
public MyEnum login(String username, String password);
/**
* 根据用户名查询
* @param username
* @return
*/
public User findByName(String username);
/**
* 更新用户
* @param user
*/
public void update(User user);
}
package com.geekymv.service.impl;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.geekymv.dao.UserDAO;
import com.geekymv.model.MyEnum;
import com.geekymv.model.User;
import com.geekymv.service.UserService;
import com.geekymv.util.DateUtil;
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
@Override
public MyEnum login(String username, String password){
User user = findByName(username); // 根据用户名查询用户
if(user == null) { // 用户不存在
System.out.println("用户名不存在,重新登录~");
return MyEnum.LOGIN;
}else { // 用户名存在
Date lastLoginDate = user.getLastLoginDate(); // 用户上一次登录时间
Date now = DateUtil.convert2Date(DateUtil.convert2String(new Date()));
long time = now.getTime();
if(lastLoginDate != null) {
time = now.getTime() - lastLoginDate.getTime();
}
System.out.println("时间差 = " + time);
int counter = user.getCounter();
if(time < 2 * 60 * 1000) { // 2分钟以内连续登录
if(counter == 3) {
System.out.println("账号被冻结~~~");
return MyEnum.WAIT;
}else {
User u = userDAO.query(username, password);
if(u != null) {
System.out.println("登录成功~~~");
user.setCounter(0);
user.setLastLoginDate(now);
update(user);
return MyEnum.SUCCESS;
}else {
System.out.println("返回登录页面");
user.setCounter(counter+1);
user.setLastLoginDate(now);
update(user);
return MyEnum.LOGIN;
}
}
}else { // 不是连续登录
User u = userDAO.query(username, password);
if(u != null) {
System.out.println("登录成功~~~");
user.setCounter(0);
user.setLastLoginDate(now);
update(user);
return MyEnum.SUCCESS;
}else {
System.out.println("返回登录页面");
user.setCounter(1);
user.setLastLoginDate(now);
update(user);
return MyEnum.LOGIN;
}
}
}
}
@Override
public User findByName(String username) {
return userDAO.queryByName(username);
}
@Override
public void update(User user) {
userDAO.update(user);
}
}
MyEnum枚举:
package com.geekymv.model;
public enum MyEnum {
LOGIN,
SUCCESS,
WAIT,
}
UserController控制器:
package com.geekymv.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.geekymv.model.MyEnum;
import com.geekymv.model.User;
import com.geekymv.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping(value="/login", method=RequestMethod.GET)
public String login() {
return "userlogin";
}
@RequestMapping(value="/login", method=RequestMethod.POST)
public String login(User user, Model model) {
MyEnum myEnum = userService.login(user.getUsername(), user.getPassword());
if(myEnum == MyEnum.LOGIN) {
return "redirect:/user/login";
}
if(myEnum == MyEnum.SUCCESS){
return "success";
}
if(myEnum == MyEnum.WAIT) {
return "wait";
}
return null;
}
}