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

2024-03-16

下面是一段使用过滤器的 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 password='"+pwd"'";

这是一种极其糟糕的做法。这种方法要求通过请求将用户名和密码传递给普通的普通版本。此外,还有一个 SQL 注入攻击漏洞。

利用会话,在 JSP/Servlet 中您可以HttpSession http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html为了。实际上也没有必要在每个请求上一次又一次地使用数据库Filter。这是不必要的昂贵。就放User在会话中使用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 of /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 of /secured/*(但是您可以选择自己的,例如/protected/*, /restricted/*, /users/*等,但这必须至少覆盖所有受保护的页面,您还需要将 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看起来像,你可能会发现本文 http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html有用。它还涵盖了如何使用PreparedStatement http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html使您的 Web 应用程序免受 SQL 注入攻击。

也可以看看:

  • Java Web应用程序中Session过期时如何重定向到登录页面? https://stackoverflow.com/questions/1026846/how-to-redirect-to-login-page-when-session-is-expired-in-java-web-application/32627461#32627461
  • 用于登录的身份验证过滤器和 servlet https://stackoverflow.com/questions/13274279/authentication-filter-and-servlet-for-login/
  • 如何处理数据库中用户的身份验证/授权? https://stackoverflow.com/questions/9965708/how-to-handle-authentication-authorization-with-users-in-a-database
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java中的过滤器验证用户名、密码(与数据库联系) 的相关文章

随机推荐

  • Java:为什么我不能将 int 转换为 Long

    Java 中的所有数字都应该是 int 类型 以下行在 Java gt 1 5 中是合法的 Short s 1 Will compile to Short s Short valueOf short 1 thus you can t exc
  • 使用httr R包发送POST请求

    当通过 POST 请求发送服务器数据时 我不知道如何模仿浏览器的行为 以下是相关 URL 并附有说明 1 http kenpom com 2 http kenpom com register php frompage 1
  • Xcode 4.6 上的 Mach-O 链接器错误

    我在 Xcode 4 6 上有一个 iOS 应用程序 当我最近尝试在 iPhone 6 1 模拟器中构建和运行时 我收到了 Mach O 链接器错误 它继续说道 ld 架构 i386 的 17 个重复符号 clang 错误 链接器命令失败
  • 如何使用 Roslyn 代码修复提供程序 API 从文档中删除 SyntaxNode 列表?

    我正在使用自定义生成的变量声明SyntaxFactory VariableDeclaration和一个列表SyntaxNode是根据一定条件收集的 我做了以下事情 修改节点 var newRoot root ReplaceNode expr
  • PHP显示BLOB数据?

    如何使用 PHP 显示 BLOB 数据 我已将 BLOB 输入到数据库中 但如何检索它 任何例子都会很棒 我考虑投票结束这个重复项 但标题相当不错 并且浏览其他问题 我没有找到一般问题的完整答案 这类问题暴露了对 HTTP 基础知识缺乏了解
  • 如何让Bootstrap 3工具提示跟随鼠标?

    我的网站上有一个链接列表 这些链接在 Bootstrap 工具提示中显示图像 a title Item 1 a a title Item 2 a a title Item 3 a
  • 在静态库中包含第三方库(例如:AFNetworking)

    是否可以在静态库中包含第三方库 示例 AFNetworking 可以包含在静态库中吗 您的问题的直接答案是肯定的 您绝对可以包含任何第三方库 如果它们公开公共 API 一组供您参考的标头 对于 AFNetworking 他们通过提供 Coc
  • 即使对于已登录的用户,也会在页面加载时清除 Woocommerce 购物车

    如果此页面不是购物车或结账页面 我想在页面加载时清除购物车页面即使对于登录的用户和管理员 任何页面也会被清除 这段代码可以工作 但现在不行了 Clears WC Cart on Page Load Only when not on cart
  • PDO从数据库获取数据

    我最近开始使用 PDO 之前我只使用 MySQL 现在我正在尝试从数据库中获取所有数据 getUsers DBH gt prepare SELECT FROM users ORDER BY id ASC getUsers gt fetchA
  • C# 如何最大限度地提高特定代码段没有上下文切换的机会?

    我的应用程序中有一段对时间要求严格的代码 我将运行它的线程设置为最高优先级 这是我能做的最多的事情 是否有关于如何使该线程中运行的部分代码被中断尽可能少的次数 更少发生上下文切换 的建议 代码并不复杂 我用内联代码替换了所有方法调用 并且不
  • 在 Azure API 上托管 Flask(python) API

    团队 我一直在尝试在 Azure API 应用程序上托管 Flask API 但它不起作用 Azure API 应用程序正在运行 托管页面打开 Python 版本为 3 6 6 我无法托管简单的 hello world 项目 我收到的不同错
  • 在 C# SQLCLR 中更改静态只读变量是否安全?

    我在 C 6 0 NET 3 5 CLR 程序集中编写了一些代码 安全级别 external access 减少代码 public static readonly DataTable warnings table init warnings
  • 循环 Eclipse 代码模板中的字段

    您可以在代码模板中执行循环吗 例如我想打印类中的所有字段 有这样的模板吗 假设你正在谈论Java gt Editor gt Templates参考 可能已经过时 是here http help eclipse org help32 inde
  • 在 MySQL 中存储 html 的 100% 安全方法 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP 同时使用客户端和服务器端验证,而不使用第 3 方代码

    编辑 感谢您的所有帮助 收到一封电子邮件 说我们不需要客户端 所以我放弃了这个想法 转而按时实际完成任务 在你问之前 是的 这是作业 不 我不是在寻找某人的完整代码 我是一个初学者 几乎没有 HTML PHP javascript 经验 但
  • 如何在android sqlite中显示blob数据的图像?

    我一直在尝试将 android sdcard 中的图像存储到 sqlite 数据库中 而且效果很好 图像作为 blob 存储到数据库中 这是我一直使用的粗略代码 Bitmap bitmap BitmapFactory decodeFile
  • 在 Fabric js 中缩放时保持描边宽度

    注 我已参考所以问题 https stackoverflow com questions 39548747 fabricjs how to scale object but keep the border stroke width fixe
  • 如何在 Phoenix 框架中有选择地禁用 CSRF 检查

    我正在尝试创建一个指向我的网站的 Facebook 页面选项卡 Facebook 向我网站的 url 发送 HTTP POST 请求 这里的问题是服务器有内置的 CSRF 检查 它返回以下错误 Plug CSRFProtection Inv
  • grails mongodb 连接被拒绝

    我的 grails 应用程序可以连接到本地 mongodb 并且工作正常 但是当我部署到 Cloud Foundry 时 尝试连接到 cf 上的 mongodb 时出现连接拒绝错误 我将 mongodb 服务绑定到我的应用程序 但它仍然无法
  • 使用Java中的过滤器验证用户名、密码(与数据库联系)

    下面是一段使用过滤器的 Java 代码 如果用户名和密码也正确 每次都会显示错误页面 请帮助我 我对这个概念不太了解 String sql select from reg where username user and pass pwd r