Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞
Login.java
//登录界面
package com.tsinghua; import javax.servlet.http.*;
import java.io.*; public class Login extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
{ //业务逻辑
try{
//中文乱码
//浏览器默认ISO-8859
res.setContentType("text/html;charset=gbk"); PrintWriter pw = res.getWriter(); //返回登录界面
pw.println("<html>");
pw.println("<body>");
//得到error信息
String info = req.getParameter("info");
if(info != null)
{
pw.println("<h1>你的用户名或是密码错误!</h1>");
}
pw.println("<h1>登录界面</h1>");
pw.println("<form action='loginCl' method=post>");
pw.println("用户名<input type='text' name='username'/><br/>");
pw.println("密码<input type='password' name='userpwd'/><br/>");
pw.println("<input type='submit' value='loing' /><br/>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>"); }
catch(Exception ex)
{
ex.printStackTrace();
} } //处理get请求
//req用于获得客户端(浏览器)的信息
//res用于向 客户端(浏览器)返回信息
public void doPost(HttpServletRequest req, HttpServletResponse res)
{ this.doGet(req,res); } }
LoginCl.java
//登录界面
package com.tsinghua; import javax.servlet.http.*;
import java.io.*;
import java.sql.*; public class LoginCl extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
{ Connection ct = null;
Statement sm = null;
ResultSet rs = null; //业务逻辑
try{ //接收用户名和密码
String u = req.getParameter("username");
String p = req.getParameter("userpwd"); //连接数据库,三部曲,加载驱动,建立连接
//加载驱动包
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//得到连接
ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456");
//创建一个Statement
sm = ct.createStatement();
//top 1 会提高查询的效率,否则数据库查询完所有再把结果告诉你 rs = sm.executeQuery("select top 1 passwd from users where userName='"+u+"'");
//executeQuery返回的是一个ResultSet执行查询select语句用Query
//executeUpdate返回的是int,因此是执行增加删除和修改
if(rs.next())
{ //这说明用户是存在的
String dbPasswd = rs.getString(1); if(dbPasswd.equals(p))
{
//真的合法
//合法
//将验证成功的信息写入session
//得到session,得到session那张表
HttpSession hs = req.getSession(true);
//默认30分钟,为了展示效果下面修改销毁时间
//该方法是按照秒来算的
hs.setMaxInactiveInterval(30); //写入属性
hs.setAttribute("uname",u); //跳转到welcome
res.sendRedirect("wel?uname="+u+"&upass="+p); }
}else{
//说明用户名不存在
//不合法
//写你要到的Servlet的那个URL
res.sendRedirect("login"); } }
catch(Exception ex)
{
ex.printStackTrace();
}finally{ try{
if(rs != null)
rs.close();
if(sm != null)
sm.close();
if(ct != null)
ct.close(); }catch(Exception ex){
ex.printStackTrace();
} } } //处理get请求
//req用于获得客户端(浏览器)的信息
//res用于向 客户端(浏览器)返回信息
public void doPost(HttpServletRequest req, HttpServletResponse res)
{ this.doGet(req,res); } }
Welcome.java
//登录界面
package com.tsinghua; import javax.servlet.http.*;
import java.io.*; public class Welcome extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
{
//得到session,得到session那张表
HttpSession hs = req.getSession(true);
//返回的是object类型,强转成String
String myName = (String)hs.getAttribute("uname");
//得到从logincl传递的用户名和密码 //判断
if(myName == null)
{
try
{
//非法登录
res.sendRedirect("login?info=error1");
//立即直接返回
return; }catch(Exception ex)
{
ex.printStackTrace();
} } //业务逻辑
try{ PrintWriter pw = res.getWriter(); //返回登录界面
pw.println("Welcome,hello,"+myName); }
catch(Exception ex)
{
ex.printStackTrace();
} } //处理get请求
//req用于获得客户端(浏览器)的信息
//res用于向 客户端(浏览器)返回信息
public void doPost(HttpServletRequest req, HttpServletResponse res)
{ this.doGet(req,res); } }
Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞的更多相关文章
- Servlet课程0425(六) 不经过验证直接跳转---session实现不同页面之间共享数据
在地址栏直接输入http://localhost:8080/myWebSite/wel 会发现页面也能跳转,只不过用户名和密码都为空,这是不可以的,因为没有经过验证非法登录了 Welcome,hell ...
- 只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法
七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT ...
- 七种数据库中Select Top的使用方法 (只显示数据库的几条记录)
七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELE ...
- OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- JavaWeb-SpringSecurity在数据库中查询登陆用户
系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...
- (五)SQLMap工具检测SQL注入漏洞、获取数据库中的数据
目录结构 一.判断被测url的参数是否存在注入点 二.获取数据库系统的所有数据库名称(暴库) 三.获取Web应用当前所连接的数据库 四.获取Web应用当前所操作的DBMS用户 五.列出数据库中的所有用 ...
- SQL Server数据库中还原孤立用户的方法集合
虽然SQL Server现在搬迁的技术越来越多,自带的方法也越来越高级. 但是我们的SQL Server在搬迁的会出现很多孤立用户,微软没有自动的处理. 因为我们的数据库权限表都不会在应用数据库中,但 ...
- SQLServer: 解决“错误15023:当前数据库中已存在用户或角色
解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023, 在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一 ...
- SQL Server 2008 错误15023:当前数据库中已存在用户或角色
解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023,在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一台 ...
随机推荐
- 翻转单词顺序VS左旋转字符串
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理.例如输入“I am a student.”,则输出“student ...
- 仿《雷霆战机》飞行射击手游开发--GameObject
转载请注明:http://www.cnblogs.com/thorqq/p/5646509.html 在上一篇中,我们介绍了各种游戏对象的功能及类的集成关系,现在我们来看看GameObject的源代码 ...
- 随机森林之Bagging法
摘要:在随机森林介绍中提到了Bagging方法,这里就具体的学习下bagging方法. Bagging方法是一个统计重采样的技术,它的基础是Bootstrap.基本思想是:利用Bootstrap方法重 ...
- L003-oldboy-mysql-dba-lesson03
L003-oldboy-mysql-dba-lesson03 IOPS:每秒钟输入输出的数量 [root@web01 ~]# cat /proc/meminfo [root@web01 ~ ...
- [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像
问题描述: [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像 原因 ...
- C# Json数据反序列化为Dictionary并根据关键字获取指定值1
Json数据: { "dataSet": { "header": { "returnCode": "0", " ...
- aix 安装redis
下载最新rpm安装包 http://www.perzl.org/aix/index.php?n=Main.Redis # uname -aAIX rhjf 1 6 00C5CC964C00# pwd/ ...
- gson小练习之嵌套复杂数据解析
package com.zf.demo; import java.util.List; import com.google.gson.Gson; public class JGson { /** * ...
- location跳转和header跳转的区别
1:header("location:url") 跳转之前不能有任何输出,如果想在header之前有输出,则要修改php.ini文件.具体 output_handler =mb_o ...
- Hello World for U (20)
Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. ...