本文共 4311 字,大约阅读时间需要 14 分钟。
登录页面应设置为 login.jsp,并在欢迎页中指定登录页面或通过 index.jsp 转发至 login.jsp。以下是通过 index.jsp 实现的转发方式:
定义 LoginDao 接口,用于获取用户登录信息:
public interface LoginDao { User getLogin(String userCode) throws SQLException;} 实现 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; }} 定义 LoginService 接口,用于处理登录业务:
public interface LoginService { User login(String uCode, String uPassword) throws SQLException;} 实现 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; }} 创建 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(); } }} 创建 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"); }} 创建 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/