发表于: 2018-02-28 23:46:19
0 654
今日完成:
1. 添加项目名后,href=""会跳转到跟目录,href="javascript:void(0);"或者href="javascript:;"
2. 使用<base href="<%=basePath%>">会导致页面内跳转失败,因为basePath添加了默认项目目录,缺少了当前页面目录
方法一:添加当前页面目录
<a class="nav-bar-a" href="school/profession/#${item}">${item}</a>
使用下面的方法组合目录
request.getRequestURL() http://localhost:8080/jqueryLearn/resources/request.jsp
request.getRequestURI() /jqueryLearn/resources/request.jsp
request.getContextPath()/jqueryLearn
request.getServletPath()/resources/request.jsp
3. nginx负载均衡后使用绝对路径<base>标签等方法会获得自己设置的域名跳转链接
解决方法:
upstream 47.95.248.39 {
server 127.0.0.1:8080;
}
4. css中
这个路径虽然报错,但是可以加载图片(???是不是通过spring读取到了图片)
换成相对路径,不报错,也可以加载
5. WEB-INF对客户端不可见,即使无法通过含有/WEB-INF/的路径进行直接访问(之前理解有误)
mvc:resources 等三种方法就是解决这个问题的
<!--本项目把静态资源放在了WEB-INF的statics目录下,资源映射如下-->
<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>
<mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/>
6. DES加密算法(对称密码体制)
key:密钥,8字节64位
Data:需要被加密/解密的数据,8字节64位
Mode:两种工作方式:加密/解密
(在通信网络两端约定共用一套key进行加密解密操作)
缺点:
(1)交易双方都使用同样钥匙,安全性得不到保证。
(2)每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。
RSA加密算法(非对称加密)
定义:RSA既能用于数据加密,也能用于数字签名。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2×e1)≡1(mod(p-1)×(q-1))。
(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A≡B^e2( mod n);B≡A^e1 (mod n);(公钥加密体制中,一般用公钥加密,私钥解密)
e1和e2可以互换使用,即:
A≡B^e1 (mod n);B≡A^e2( mod n);
局限性:由于进行的都是大数计算,速度一直是RSA的缺陷。一般来说只用于少量数据加密。
MD5加密算法:
定义:MD5算法是将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,即使你看到源程序和算法描述,也无法将MD5的值变回原始的字符串。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
7. Cookie和Session
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份
HTTP无状态,每次客户端从服务器请求,三次握手,传送完数据就断开连接,因此会话不能持续。
客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
8. 基于 Token 的身份验证方法
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
9. Token标准方法JWT
JSON Web Tokens 采用Base64编码
JWT 标准的 Token 有三个部分:
header
{
"typ": "JWT", //Token类型
"alg": "HS256" //使用的算法
}
payload
iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expiration time,过期时间
nbf:Not before
iat:Issued at,发行时间
jti:JWT ID
+自定义
signature
JWT 的最后一部分是 Signature ,这部分内容有三个部分,先是用 Base64 编码的 header.payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。
10. 任务四TILES框架学习心得+赞美老大
https://zhuanlan.zhihu.com/p/34116571
明日计划:
1. 使用DES对用户ID和登录时间加密,生成Token,放入Cookie中,拦截器里通过Cookie中判断Token的有效性来判断用户是否登录。
2. 修改Task4中的两个页面,一个设为用户不登录可以访问,一个设为用户必须登录才可以访问。要求用户必须登录才能访问的url统一增加前缀 /u/。
遇到的问题:
1. 暂无
收获:
1. 学习三种不同加密算法的优缺点
2. cookie session token 概念理解
3. 用户登录的过程,验证机制的实现方式
评论