发表于: 2020-08-12 23:34:09
1 2201
整理笔记
【Tiles】
Tiles框架,主要是提供页面布局文件功能,就像提供html、jsp页面一样。 但它与html、jsp相比,主要不同是,将页面不同部分(左边、上边、页头、页脚、中间body部分),叫局部页面,组合形成最终html或jsp页面,以提供相同局部代码复用功能。
在SpringMvc配置文件中配置Tiles视图解析器,视图解析器是为了解析controller返回的值来匹配路径来找到对应的jsp的。

tiles配置文件tiles.xml(可随意),放置在WEB-INF目录下
.png)
上图中的name为templet的是基础模板,并给这个模板填充了header和footer。然后name为*.page的从templet继承,同样拥有了header和footer,并添加了body部分,最终形成了一个拥有header,body,footer的jsp页面。其中values="/jsp/{1}.jsp/中的{1}是获取*匹配的内容,因为我的controller处理完毕返回了一个home.jsp,因此Tiles框架视图解析器起作用找到该Tiles的定义并重组页面形成新的jsp并将model交给该jsp处理,该jsp渲染视图完毕后返回。
2.【jsp的来源和发展】
jsp技术简介
JSP是Java Server Page的缩写,它是Servlet的扩展,它的作用是简化网站的创建和维护。
JSP是HTML代码与Java代码的混合体。
JSP形式上像HTML,但本质上是Servlet。
tomcat中jsp执行过程
.png)
当网站主页打开、有用户访问JSP文件时,服务器才会把他编程.java文件
jsp起源
在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。
如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。
对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。
为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。
JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。
JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,JSP 页面的文件扩展名必须为.jsp。
在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素。
JSP中的Java代码可以使用out.println语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用System.out.println语句将它们打印到命令行窗口。
JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态内容,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
jsp发展
这个是比较笼统的概念,去百度了也没看到比较满意的标准答案,jsp的发展要与他的起源联系,毕竟有人用才会有发展。jsp能够在目前看来大放光彩的原因是,后端程序员不用专门去学前端知识,在jsp中可以使用html和java语言就能写出前端页面,前端也可以将jsp文件转换为JavaScript文件,前后端分离的情况下,后端程序员也能用jsp辅助自己开发。目前来看jsp主要用于开发一些中小型的项目,毕竟大项目还是必须得用前端来专门开发。这也是jsp的局限性。
【另外几种模板框架对比】
JSP
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。Jsp编译成Class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
Velocity
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比Jsp性能还要好些
3、使用表达式语言,据说Jsp的表达式语言就是学Velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对Jsp标签支持不够好
Freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对Jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
1.【什么是DES】
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。
DES算法入口参数:
DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES基本原则:
DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。
算法步骤:
DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。初始置换规则如下:
注意:这里的数字表示的是原数据的位置,不是数据
.png)
即将输入的64位明文的第1位置换到第40位,第2位置换到第8位,第3位置换到第48位。以此类推,最后一位是原来的第7位。置换规则是规定的。L0(Left)是置换后的数据的前32位,R0(Right)是置换后的数据的后32位。
这里我的理解是比如明文输入的密码是“123”,先将“123”转换为base64码,转换之后按照上面的表的顺序排列转换后的“123”,然后再进行下一步
经过初始置换后,进行16轮完全相同的运算,在运算过程中数据与秘钥结合。
函数f的输出经过一个异或运算,和左半部分结合形成新的右半部分,原来的右半部分成为新的左半部分。每轮迭代的过程可以表示如下:
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)
⊕:异或运算
Kn是向第N层输入的48位的秘钥,f是以Rn-1和Kn为变量的输出32位的函数
.png)
运算比较复杂,也确定了密码的安全性
DES在cookie中的用处
可以使用DES来将用户的id和登录时间加密为uid和lid,存在cookie中,然后在拦截器中解密出来验证uid和lid的正确性,从而实现用户通行许可的验证。
2.【什么是Token】
在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用
Token的含义
1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
Token术语
Token, 令牌,代表执行某些操作的权利的对象
访问令牌(Access token)表示访问控制操作主体的系统对象
邀请码,在邀请系统中使用
Token, Petri 网(Petri net)理论中的Token
密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备
会话令牌(Session token),交互会话中唯一身份标识符
令牌化技术 (Tokenization), 取代敏感信息条目的处理过程
如何使用Token:
1、用设备号/设备mac地址作为Token(推荐)
客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。
服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。
分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。
2、用session值作为Token
客户端:客户端只需携带用户名和密码登陆即可。
客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。
分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。
【补充】
session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。
说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点:
1. session保存的位置是在服务器端
2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能
3. 单纯的使用session来维持用户状态的话,那么当同时登录的用户数量较多的时候,或者存在较多的数量的session会导致查询慢的问题
本质上:session技术就是一种基于后端有别于数据库的临时存储数据的技术
3.【什么是Cookie】
基于 session 的用户认证借助于请求体对象 req 中的 session 数据来完成.
//基于WebServlet3.0的获取session的方式//这种方式获取session如果本次会话存在,则返回本次会话session//如果不存在则创建一个新的sessionHttpSession session = request.getSession();
session在访问tomcat服务器HttpServletRequest的getSession(true)的时候创建,tomcat的ManagerBase类提供创建sessionid的方法:随机数+时间+jvmid。
当客户端请求服务端经过身份验证之后,服务端会生成并且保存身份信息相关的session数据,并且将对应sessionid写入cookie,通过响应传输给客户端,客户端将cookie保存在本地,以便第二次或以后的请求能够带上cookie中的sessionid去让服务端辨识该用户是属于哪个会话的(tomcat生成的sessionid叫做jsessionid),并且也会验证cookie字段中的logged_in字段,判断这个字段是因为,如果该用户是经过验证的,则这个字段的值肯定为(yes,true,1)这时,就无需重新认证身份,否则,需要重新进入身份认证流程。
【 session和cookie的区别和联系】
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
(5)可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cooki
今日问题暂无
评论