一、用户登录
(一)用户登录流程图
从图中可以看出,用户登录过程中首先要验证用户名和密码是否正确,如果正确,可以成功登录系统,系统会自动跳转到主页;如果错误,则在登录页面给出错误提示信息。
1、创建持久化类
创建用户持久化类User,并在User类中定义用户相关属性以及相应的getter/setter方法。
public class User implements Serializable {
private Integer id; //用户id
private String name; //用户名称
private String password; //用户密码
private String email; //用户邮箱(用户账号)
private String role; //用户角色
private String status; //用户状态
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
2、实现DAO
创建一个用户接口UserMapper,并在接口中定义login()方法,login()方法通过用户账号和用户密码查询用户信息。
public interface UserMapper{
@Select("select * from user where user_email=#{email} AND user_password=#{password} AND user_status!='1'")
@Results(id = "userMap",value = {
//id字段默认为false,表示不是主键
//column表示数据库表字段,property表示实体类属性名。
@Result(id = true,column = "user_id",property = "id"),
@Result(column = "user_name",property = "name"),
@Result(column = "user_password",property = "password"),
@Result(column = "user_email",property = "email"),
@Result(column = "user_role",property = "role"),
@Result(column = "user_status",property = "status")
})
User login(User user);
}
3、实现Service
(1)创建UserService接口,并在该接口中定义login()方法,login()方法通过用户账号和用户密码查询用户信息。
public interface UserService{
//通过User的用户账号和用户密码查询用户信息
User login(User user);
}
4、实现Service
(2)创建UserService接口的实现类UserServiceImpl,在类中重写接口的login()方法。
/**
*用户接口实现类
*/
@Service
public class UserServiceImpl implements UserService {
//注入userMapper
@Autowired
private UserMapper userMapper;
//通过User的用户账号和用户密码查询用户信息
@Override
public User login(User user) {
return userMapper.login(user);
}
}
5、实现Controller
创建用户控制器类UserController,类中定义用户登录的方法login()。
/**
* 用户登录和注销Controller
*/
@Controller
public class UserController {
@RequestMapping("/toMainPage")
public String toMainPage(){
return "main";
}
//注入userService
@Autowired
private UserService userService;
/*
用户登录
*/
@RequestMapping("/login")
public String login(User user, HttpServletRequest request){
try {
User u=userService.login(user);
/*
用户账号和密码是否查询出用户信息
是:将用户信息存入Session,并跳转到后台首页
否:Request域中添加提示信息,并转发到登录页面
*/
if(u!=null){
request.getSession().setAttribute("USER_SESSION",u);
return "redirect:/admin/main.jsp";
}
request.setAttribute("msg","用户名或密码错误");
return "forward:/admin/login.jsp";
}catch(Exception e){
e.printStackTrace();
request.setAttribute("msg","系统错误");
return "forward:/admin/login.jsp";
}
}
/*
注销登录
*/
@RequestMapping("/logout")
public String logout( HttpServletRequest request){
try {
HttpSession session = request.getSession();
//销毁Session
session.invalidate();
return "forward:/admin/login.jsp";
}catch(Exception e){
e.printStackTrace();
request.setAttribute("msg","系统错误");
return "forward:/admin/login.jsp";
}
}
}
6、实现登录页面功能
将项目运行所需要的CSS文件、图片、js和JSP文件按照项目文件组织结构引入到项目中。其中系统首页index.jsp实现了一个转发功能,在访问时会转发到登录页面,其实现代码如下所示。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 访问时自动转发到登录页面 -->
<jsp:forward page="/admin/login.jsp"/>
把登录页面login.jsp导入到项目中,登录页面主要包含一个登录表单。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<meta charset="UTF-8">
<title>云借阅-图书管理系统</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/webbase.css"/>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/pages-login-manage.css"/>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
</head>
<body>
<div class="loginmanage">
<div class="py-container">
<h4 class="manage-title">云借阅-图书管理系统</h4>
<div class="loginform">
<ul class="sui-nav nav-tabs tab-wraped">
<li class="active">
<h3>账户登录</h3>
</li>
</ul>
<div class="tab-content tab-wraped">
<%--登录提示信息--%>
<span style="color: red">${msg}</span>
<div id="profile" class="tab-pane active">
<form id="loginform" class="sui-form" action="${pageContext.request.contextPath}/login"
method="post">
<div class="input-prepend"><span class="add-on loginname">用户名</span>
<input type="text" placeholder="企业邮箱" class="span2 input-xfat" name="email">
</div>
<div class="input-prepend"><span class="add-on loginpwd">密码</span>
<input type="password" placeholder="请输入密码" class="span2 input-xfat" name="password">
</div>
<div class="logined">
<a class="sui-btn btn-block btn-xlarge btn-danger"
href='javascript:document:loginform.submit();' target="_self">登 录</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript">
/**
* 登录超时 展示区跳出iframe
*/
var _topWin = window;
while (_topWin != _topWin.parent.window) {
_topWin = _topWin.parent.window;
}
if (window != _topWin)
_topWin.document.location.href = '${pageContext.request.contextPath}/admin/login.jsp';
</script>
</html>
7、启动项目,登录测试
在执行登录操作之前,先查看一下数据库中user表中的数据。
将项目部署到Tomcat服务器并启动项目,访问登录页面,在登录页面中分别输入账号zhangsan@itcast.cn和密码123456,单击“登录”按钮登录系统。