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

这是一个非常糟糕的做法.这种方法要求用户名和密码都通过请求传递普通香草.而且,你有一个SQL注入攻击漏洞.

利用会话,在JSP / Servlet中你有HttpSession.实际上也没有必要在使用过滤器的每个请求上一次又一次地命中数据库.这是不必要的昂贵.只需使用Servlet将User置于会话中,并使用Filter检查每个请求的存在.

从/login.jsp开始:

${error}

然后,创建一个LoginServlet,它映射到/ login的url-pattern上,并按如下方式实现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.

}

然后,创建一个映射在/ secured / *的url-pattern上的LoginFilter(你可以选择你自己的,例如/ 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的外观,您可能会发现this article很有用.它还介绍了如何使用PreparedStatement保存您的Web应用程序免受SQL注入攻击.

也可以看看:

java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...相关推荐

  1. html验证用户名已存在,验证用户名是否在数据库中已存在()

    验证用户名是否在数据库中已存在(求助) 本帖最后由 cross2010_0 于 2013-12-26 21:21:00 编辑 表单提交的页面index.asp 测试-验证用户名是否重复 functio ...

  2. java数据库验证用户名,java新手:注册时验证用户名是否在数据库里已存在

    java新手:最近在实现ssh实现注册时验证用户名是否已经存在 在register.jsp里 required="required"表示输入框不可以为空, onblur事件会在对象 ...

  3. java验证码验证码_Java登录页面实时验证用户名密码和动态验证码

    ●登录名和密码是同时验证的,并不是先验证登录名是否存在,然后再验证密码是否正确,是同时进行验证,若登录名和密码当中一个条件不符合,则提示用户登录名或者密码错误, 这样做的意义是为了保证用户信息的安全( ...

  4. Java登录页面实时验证用户名密码和动态验证码

    ●登录名和密码是同时验证的,并不是先验证登录名是否存在,然后再验证密码是否正确,是同时进行验证,若登录名和密码当中一个条件不符合,则提示用户登录名或者密码错误, 这样做的意义是为了保证用户信息的安全( ...

  5. JAVA 二叉树 常见操作合集(前中后序递归非递归遍历 层序遍历 求深度宽度 判断兄弟结点 堂兄弟节点)

    今天复习了二叉树的相关操作,整理归纳如下. 二叉树结点定义 //节点类private static class TreeNode{private int val = 0;private TreeNod ...

  6. CAS Server(三):配置MySQL数据库验证用户名密码

    1. 配置数据库 #创建CAS数据库 CREATE DATABASE cas;#创建用户表 CREATE TABLE `t_user` (`id` int(0) NOT NULL AUTO_INCRE ...

  7. mysql 数据类型怎么用,myMySQL数据库怎么更改表中某字段的数据类型? MySQL数据库使用教程...

    在mysql中,可以使用"ALTER TABLE"语句配合"MODIFY"关键字来更改表中某字段的数据类型:语法格式"ALTER TABLE MODI ...

  8. 对数据库中的数据(用户名/密码)加密解密

    生成32位加密文: public static String md5Encode(String inStr) throws Exception {MessageDigest md5 = null;tr ...

  9. jquery ajax无刷新请求Struts2验证用户名密码数据库是否存在

    通过ajax请求验证后台数据是否存在. 首先导入struts2的核心包. 后台Action代码 import com.opensymphony.xwork2.ActionSupport;public ...

最新文章

  1. 如果企业网站长时间没有排名可以从多个方面进行分析
  2. t66y.buzz index.php,6.FizzBuzz
  3. 基于SLF4J MDC机制实现日志的链路追踪
  4. 运行ant脚本(转载)
  5. SAP CRM中的文本类型 - Text Type
  6. Java爬取并下载酷狗音乐
  7. stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系
  8. Linux ubuntu安装搜狗输入法
  9. 机器人绳索英雄下载苹果手机_警察机器人绳索英雄游戏下载-警察机器人绳索英雄苹果版v1.0-FC游戏网...
  10. 微软软件推送服务器,微软将通过系统更新功能向大部分用户推送新版Microsoft Edge浏览器-...
  11. java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. opencv实现图像目标对象区域挖掘
  13. expdp导出表结构_Oracle用exp导出部分表和expdp
  14. 直播客户端和浏览器使用桌面共享时出现黑屏等问题
  15. IDEA画Use Case(用例图)
  16. 蛋白质组学检测发展前景
  17. 【python实战】二:乒乓球比赛对手问题
  18. 紫薇在线排盘php源码,灵匣网紫微斗数在线排盘系统
  19. Python多维数组,已知多科成绩求英语成绩最高的学生名
  20. 刘小瑜 大数据与人工智能论文

热门文章

  1. golang jwt设置过期_听说你的JWT库用起来特别扭,推荐这款贼好用的!
  2. php 如何宏定义,php – 在html中实现宏定义的方法
  3. 位置服务器管理器,查看 DIMM 位置
  4. java都要caps标点_第 1 章 管理 Java CAPS 用户
  5. GTJ2018如何导出全部工程量_如何成为优秀的造价员?广联达编制内刊手册,造价员算量高手秘籍...
  6. php标签嵌入规范,HTML标签嵌套的详细规则
  7. python sep函数_Python中带有print()函数的sep参数
  8. 字符串最长回文子串_最长回文子串
  9. c++详解【new和delete】
  10. mysql与mangodb多租户_MongoDB多租户(Java):如何使用MongoClient在运行时切换具有不同数据库凭据的MongoDB数据库?...