学习心得

今天学习了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);
        }
    

 

posted on 2022-09-03 18:58  骐琳  阅读(22)  评论(0编辑  收藏  举报

你点我就回上面去了ヾ(≧O≦)〃嗷~