MD5加密

MD5概述
用户名密码保存在客户端是一种十分危险的行为。所以需要进行加密后保存。
其中MD5就是一种比较常用的加密算法。
与其说MD5算法是一种加密算法,不如说是一种数据指纹(数据摘要)算法。
其特点如下:
任意大小的二进制数经过MD5计算后都能得到一个独一无二的128位二进制数。
不同的数据算出的MD5绝对不相同。
相同的数据算出的MD5一定相同。
只能有明文算出密文,密文是永远也无法算成明文的。
MD5大量应用于计算机中。如数据库中保存的密码通常都是经过MD5加密后的数据。如用户下载文件时可以进行MD5校验防止数据被篡改。
在记住用户名案例中,我们可以使用MD5进行加密后再保存在客户端,从而保证数据安全。
在数据库中保存的密码也不宜直接存储为明文。也要经过MD5加密后存储。
public class MD5 {
public static String md5(String plainText) {
byte[] secretBytes = null;
if(plainText==null){
return null;
}
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}

修改之前的程序:
注册时:RegistServlet
user.setPassword(MD5.md5(user.getPassword()));
service.regist(user);
登录时:
|-普通登录
User user = service.login(username,MD5.md5(password));
|-30天自动登录保存cookie
Cookie alc = new Cookie("autologin",URLEncoder.encode(
user.getUsername()+":"+MD5.md5(user.getPassword()),"utf-8"));

Apache DBUtils

Apache DBUtils介绍
我们编写JDBC代码时发现大量的代码都是重复的,能不能简化JDBC的操作呢?Apache组织为我们提
供了一套开源jar包,大大简化了JDBC操作。
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,
学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
因此dbutils成为很多不喜欢hibernate的公司的首选。

QueryRunner!!!
(1)如果需要事务控制必须用这组方法 ,
QueryRunner()
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh)
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
int update(Connection conn, String sql)
int update(Connection conn, String sql, Object... params)
int update(Connection conn, String sql, Object param)
(2)如果不需要进行事务控制,可以使用这组方法,不需要每次都传入连接,底层会自己去找数据源要连接
QueryRunner(DataSource ds)
<T> T query(String sql, ResultSetHandler<T> rsh)
<T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
int update(String sql)
int update(String sql, Object... params)
int update(String sql, Object param)

概述
以下代码只需理解:被监听对象、监听器对象、注册监听。
----------------------------
!public class MyJFrame {
public static void main(String[] args) {
//frame就是被监听对象
//new MmL()监听器对象
//当frame窗体上有鼠标移动或拖动时,分别触发监听器对象的mouseMove、mouseDragger
JFrame frame = new JFrame();
class Mml implements MouseMotionListener{
public void mouseDragged(MouseEvent e) {
System.out.println("鼠标拖动了");
}
public void mouseMoved(MouseEvent e) {
System.out.println("鼠标移动");
}
}
frame.addMouseMotionListener(new Mml());
frame.setVisible(true);
}
}
监听器:就是一个实现特定接口的普通java程序,这个程序专门用于监听另外一个java对象(被监听对象)
的方法调用或属性改变,当被监听对象发生以上事件时,监听器的某一个方法会被立即执行。
分析图见:“监听器.png”

监听器分为:普通监听器和Servlet监听器

5.2、Servlet监听器

5.2.1八大监听器
JavaEE中提供了八大监听器,用来监听Servlet中指定事件。
它们监听的事件源分别是ServletContext,HttpSession,ServletRequest这三个域对象进行监听。

Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型:
监听这三个对象的创建与销毁操作
监听域对象中属性的添加或删除操作
监听绑定到HttpSession域中的某个对象的状态改变的操作。

5.2.2开发步骤:
1、创建一个类实现特定的接口,并实现对应的抽象方法
和编写其他事件监听器一样,编写servlet监听器也需要实现特定的接口,并针对
响应的动作实现对应的方法。
2、在web.xml文件进行“注册” 配置

转载于:https://www.cnblogs.com/buyucgb/p/5975283.html

day19_MD5加密_Apache DBUtils_监听器 知识回顾相关推荐

  1. Nginx+Keepalived+LVS高可用集群----相关知识回顾

    1.原理回顾 1.1.集群知识回顾 集群特点: 1)高性能performance. 一些需要很强的运算处理能力比如天气预报,核试验等.这需要上千台计算器协同来完成这个工作的,共同分担计算任务. 2)价 ...

  2. [C#] C# 知识回顾 - 装箱与拆箱

    装箱与拆箱 目录 生活中的装箱与拆箱 C# 的装箱与拆箱 值类型和引用类型 装箱 拆箱 读者见解 生活中的装箱与拆箱    我们习惯了在网上购物,这次你想买本编程书 -- <C 语言从入门到放弃 ...

  3. 【springmvc+mybatis项目实战】杰信商贸-6.重点知识回顾

    1.重点知识回顾 Maven 1)覆盖仓库文件,实际企业开发,公司会架一个测试服务器,在测试服务器中架私服.我们开发人员的程序,都连接私服.当本地没有项目中要使用的jar,Myeclipse mave ...

  4. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  5. java知识回顾_Java7 –回顾

    java知识回顾 我开始写博客文章,介绍即将发布的Java8版本中的新增功能 ,并认为我将从快速回顾一下Java7带给我们的内容开始. Java7于2011年7月发布,被描述为"更具进化性而 ...

  6. java知识回顾_Java – 2012年回顾和未来预测

    java知识回顾 这篇文章将重点讨论2012年发生的大小事件,并展望2013年的一些未来预测.其中一些预测将是诚实的猜测,而另一些则将是诚实的猜测. 好吧,只要说我的"恶魔般"的一 ...

  7. php基础知识总结大全,php基础知识回顾 —— 常量

    您现在的位置是:网站首页>>PHP>>php php基础知识回顾 -- 常量 发布时间:2019-01-23 17:23:08作者:wangjian浏览量:489点赞量:0 在 ...

  8. Comparable接口的使用:(知识回顾)

    Comparable接口的使用:(知识回顾) 1.定义一个学生类,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则. package demo02.sort; ...

  9. 【机器学习】Andrew Ng——03线性代数知识回顾

    线性代数知识回顾   在斯坦福大学Andrew Ng老师的机器学习课程中,所提及的线性代数知识都是比较简单基础的. 简单复习 矩阵维度: 元素的表示方法(注意这里的下标是从1开始的,而不是0):    ...

最新文章

  1. KindEditor得不到textarea值的解决方法----摘至天涯
  2. 前core成员迈克·赫恩:BCH社区与2014年的BTC社区非常相似
  3. 8.15 12.13-12.16
  4. 遇见BUG(2)去掉你的增量编译使能!
  5. 微软 WinGet 抄袭 AppGet 始末,个人开源的困境该如何破?
  6. STM32F103之FLASH组织
  7. JQuery中html、append、appendTo、after、insertAfter系列方法
  8. 快速傅里叶变换_计算物理基础:第八章-快速傅里叶变换(FFT)
  9. iNeuOS工业互联网操作系统,智慧用电测控应用案例
  10. 选择排序与冒泡排序的区别
  11. mysql多数据源_egg-mysql配置多数据源
  12. Percona XtraDB Cluster 集群参数配置说明(PXC 5.7)
  13. 社会语义网络图用什么软件绘制_GitMind:免费在线思维导图软件
  14. java 实现html压缩
  15. linux 格式化u盘 fat32,Ubuntu下格式化U盘的方法(基于格式化命令)
  16. FocalLoss解析
  17. 智能制造案例——面向重型机械车间智能制造系统解决方案
  18. 面试又被问高并发,哑口无言?一份高并发核心文档助你吊打面试官
  19. xp系统迁移到固态硬盘_通过网络轻松传输,将XP迁移到Windows 7
  20. pygame-KidsCanCode系列jumpy-part13-改进跳跃

热门文章

  1. (补充)常用端口大全
  2. 信息检索的评价指标(Precision、Recall、F-score、MAP、ROC、AUC)
  3. ES6的新特性----Vue学习必备基础知识
  4. 重写 View 的 Touch 方法,实现一个酷炫的九宫格图片
  5. Oracle事务和锁
  6. SYMBDSNAP_SDK[3943]: Failed to open device: /dev/symbdsnapctl, errno: 2
  7. Android设置Settings:预读取设置的选项和更新设置结果【2】
  8. 可可肉的奋斗(第一天)2012-12-24
  9. 时光穿越_电脑时间显示为2011年6月1日
  10. Hibernate的各种保存方式的区别