学习心得
今天学习了mvc模式,这种写法很清晰明了,可以处理很多,可以给密码加密,主要就是加密很重要
心情
学习了MD5加密,感觉很神奇,这样数据库就算被盗,也登陆不上去,变得更安全
掌握情况:一般还行,现在很少出现404了
学习总结:
mvc架构:
是一种软件架构模式,把整个软件分为三层: Model、 View、 Controller
1. Model:模型----获取数据,并且处理数据,返回给Controller。
entity:数据库实体类User----user表
service:业务控制层,其余的活都交给service
dao:数据模型层---操作数据库,执行sql
2. View:视图---- 看见的页面,渲染数据,渲染页面。
3. Controller:控制器----servlet,接请求,给响应。
耦合度:代码之间的关联关系。
为什么要分层?
MVC,降耦合。重用性高。可维护性高。
调用关系:
View层发起请求---Controller--- Service---Dao---Service---Controller---View
导入jar包,导入js文件, 复制粘贴之前的JDBC工具类,字符集的过滤器
我们之前的做法,一个servlet就只处理一个请求?
一个servlet,能不能处理多个post请求? 可以的。
利用反射
MVC设计模式理念: 一张表,一个entity, 一个service, 一个dao, 一个controller
和表对应的实体类
要求:
1.类名和表名要相同
2.类中的属性名和表中的字段名相同
3.类中只能有对应的set,get方法和需求用到的构造器,如果有需要,可以写toString。
4.序列化.实现序列化接口
业务层
业务:软件的功能
登录,注册
我们在dao层写了个方法save,保存
加盐(密码加密)
这个方法的参数是原始密码,在controller通过request.getParameter("")接到的写在密码框中的密码
返回值是经过加密处理过后的密码
加盐 salt
MD5+盐 加密
MD5算法
1 public class MD5Util { 2 /* 3 获取用来加密的盐 4 */ 5 public static String getSalt(){ 6 //从我定义的一组数据中拿出几个数字,字母或者符号当作盐 7 String words = "abcdefghijklmnopqrstuvwsyz0123456789!@#$%^&*()_+~"; 8 StringBuilder strb = new StringBuilder(); 9 //从我定义的数据中取出8个字符,当作盐 10 for (int i = 0; i < 8 ; i++) { 11 //随机数 12 //生成0-字符串的长度的随机数[0,长度) 13 strb.append(words.charAt((int) Math.floor(Math.random() * words.length()))); 14 } 15 return strb.toString(); 16 } 17 18 19 20 21 public static String stringToMD5(String str){ 22 return DigestUtils.md5Hex(str.getBytes(StandardCharsets.UTF_8)); 23 } 24
密码在加盐加密过后登录的时候怎么办?
登录的时候,肯定输入的还是比如说你自己输入的“123456”
登陆的时候还得按照加盐加密的形式来比对,还需要拿着123456和之前加密时候的盐再按照规则加密过后再比对
问题:我们能找到上次加密的时候用的那个盐吗?
盐 怎么处理???
我们需要把加密时候用的盐记录下来,登陆的时候还需要使用!
唯一的办法就是把这个盐也加入到数据库中,所以就需要再添加一个字段
public int register(Vip vip){ //注册的业务执行的就是保存的操作 try { //密码的加密处理 //生成盐 String salt = MD5Util.getSalt(); //对密码进行加密 // String newPassword = MD5Util.stringToMD5(vip.getPassword()+salt); //加密过后还要重新赋值给vip vip.setPassword(MD5Util.stringToMD5(vip.getPassword()+salt)); vip.setSalt(salt); return dao.save(vip); } catch (Exception e) { throw new RuntimeException(e); }