gpt4 book ai didi

jsp - 使用 Java 中的过滤器验证用户名、密码(与数据库联系)

转载 作者:行者123 更新时间:2023-12-04 02:34:25 25 4
gpt4 key购买 nike

下面是一段使用过滤器的 Java 代码,如果用户名和密码也正确,则每次都会显示错误页面。请帮助我,我对这个概念了解不多。

String sql="select * from reg where username='"+user+"' and pass='"+pwd+"'";
rs=st.executeQuery(sql);
if(rs.next())
{
chain.doFilter(request,response);
}
else
sc.getRequestDispatcher("/error.html").forward(request,response);

最佳答案

String sql="select * from reg where username='"+user+"' and pass='"+pwd+"'";


这是一个非常糟糕的做法。这种方法要求用户名和密码都通过请求在普通 Vanilla 中传递。此外,您还有一个 SQL 注入(inject)攻击漏洞。
使用 session ,在 JSP/Servlet 中有 HttpSession 为了。实际上也没有必要使用 Filter 对每个请求一次又一次地访问数据库。 .这是不必要的昂贵。就放 User在 session 中使用 Servlet并使用 Filter在每个请求中检查它的存在。
/login.jsp 开始:
<form action="login" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit"> ${error}
</form>
然后,创建一个 LoginServlet映射到 url-pattern/login并拥有 doPost()执行如下:
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userDAO.find(username, password);

if (user != null) {
request.getSession().setAttribute("user", user); // Put user in session.
response.sendRedirect("/secured/home.jsp"); // Go to some start page.
} else {
request.setAttribute("error", "Unknown login, try again"); // Set error msg for ${error}
request.getRequestDispatcher("/login.jsp").forward(request, response); // Go back to login page.
}
然后,创建一个 LoginFilter映射到 url-pattern/secured/* (但是您可以选择自己的,例如 /protected/*/restricted/*/users/* 等,但这必须至少涵盖所有 protected 页面,您还需要将 JSP 放在 WebContent 中的适当文件夹中)并具有 doFilter()执行如下:
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
String loginURI = request.getContextPath() + "/login.jsp";

boolean loggedIn = session != null && session.getAttribute("user") != null;
boolean loginRequest = request.getRequestURI().equals(loginURI);

if (loggedIn || loginRequest) {
chain.doFilter(request, response); // User is logged in, just continue request.
} else {
response.sendRedirect(loginURI); // Not logged in, show login page.
}
应该是这样的。希望这可以帮助。
了解如何使用 UserDAO看起来像,你可能会发现 this article有用。它还介绍了如何使用 PreparedStatement 从 SQL 注入(inject)攻击中拯救你的 webapp。
也可以看看:
  • How to redirect to Login page when Session is expired in Java web application?
  • Authentication filter and servlet for login
  • How to handle authentication/authorization with users in a database?
  • 关于jsp - 使用 Java 中的过滤器验证用户名、密码(与数据库联系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1945377/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com