博客
关于我
超市订单管理系统项目(2)——登录功能实现(后端)
阅读量:338 次
发布时间:2019-03-04

本文共 4311 字,大约阅读时间需要 14 分钟。

登录功能实现

1. 登录页面设置

登录页面应设置为 login.jsp,并在欢迎页中指定登录页面或通过 index.jsp 转发至 login.jsp。以下是通过 index.jsp 实现的转发方式:

2. 数据库访问接口

定义 LoginDao 接口,用于获取用户登录信息:

public interface LoginDao {
User getLogin(String userCode) throws SQLException;
}

3. 数据库访问实现类

实现 LoginDao 接口的 LoginDaoImpl 类:

public class LoginDaoImpl implements LoginDao {
@Override
public User getLogin(String uCode) throws SQLException {
Connection conn = BaseDao.getConn();
if (conn != null) {
try {
PreparedStatement preparedStatement = conn.prepareStatement(
"SELECT * FROM smbms_user WHERE userCode = ?");
preparedStatement.setString(1, uCode);
ResultSet resultSet = BaseDao.executeQ(conn, preparedStatement, null, null);
if (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUserCode(resultSet.getString("userCode"));
user.setUserName(resultSet.getString("userName"));
user.setUserPassword(resultSet.getString("userPassword"));
// 其他字段获取和赋值
return user;
}
} catch (SQLException e) {
e.printStackTrace();
}
BaseDao.close(conn, preparedStatement, null);
}
return null;
}
}

4. 业务逻辑接口

定义 LoginService 接口,用于处理登录业务:

public interface LoginService {
User login(String uCode, String uPassword) throws SQLException;
}

5. 业务逻辑实现类

实现 LoginService 接口的 LoginServiceImpl 类:

public class LoginServiceImpl implements LoginService {
@Override
public User login(String uCode, String uPassword) throws SQLException {
LoginDao loginDao = new LoginDaoImpl();
User user = loginDao.getLogin(uCode);
return user;
}
}

6. 登录Servlet实现

创建 LoginServlet 类,处理登录请求:

@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String userCode = req.getParameter("userCode");
String password = req.getParameter("userPassword");
LoginService loginService = new LoginServiceImpl();
try {
User user = loginService.login(userCode, password);
if (user != null) {
HttpSession session = req.getSession();
session.setAttribute(Constants.USER_SESSION, user);
resp.sendRedirect("frame.jsp");
} else {
req.setAttribute("error", "用户名或密码错误");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

7. 登出功能实现

创建 LogoutServlet 类,处理注销操作:

@WebServlet("/user/exit.do")
public class LogoutServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
session.removeAttribute(Constants.USER_SESSION);
resp.sendRedirect("/login.jsp");
}
}

8. 登录拦截优化

创建 SysFilter 类,实现登录拦截:

@WebFilter("/jsp/*")
public class SysFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化逻辑可根据需求添加
}
@Override
public void doFilter(
ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
User user_sess = (User) session.getAttribute(Constants.USER_SESSION);
if (user_sess == null) {
request.getRequestDispatcher("/error.jsp").forward(request, response);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
// 销毁逻辑可根据需求添加
}
}

总结

以上实现完整地完成了登录功能的开发,涵盖了页面转发、数据库访问、业务逻辑处理以及前后端的整合。通过拦截器优化,确保未登录用户无法访问核心功能,进一步提升了系统安全性。

转载地址:http://ulgh.baihongyu.com/

你可能感兴趣的文章
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos配置中心集群原理及源码分析
查看>>
nacos配置自动刷新源码解析
查看>>
Nacos集群搭建
查看>>
nacos集群搭建
查看>>
Navicat for MySQL 查看BLOB字段内容
查看>>
Neo4j电影关系图Cypher
查看>>
Neo4j的安装与使用
查看>>
Neo4j(2):环境搭建
查看>>
Neo私链
查看>>
nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Nessus漏洞扫描教程之配置Nessus
查看>>
Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
查看>>
NetApp凭借领先的混合云数据与服务把握数字化转型机遇
查看>>
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
netcat的端口转发功能的实现
查看>>
netfilter应用场景
查看>>
netlink2.6.32内核实现源码
查看>>
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>