发表于: 2020-08-11 23:52:12
1 2217
任务思考
一、任务五的深度思考
拦截器、过滤器、监听器各有什么作用?
拦截器
Interceptor是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个Action执行前阻止其执行 。同时也提供了一种可以提取Action中可重用的部分的方式。
拦截器的实现方法: 主要通过两种途径,第一种是实现HandlerInterceptor接口,第二种是实现WebRequestInterceptor接口。
(1)HandlerInterceptor 接口
在该接口中,定义了 3 个方法,分别为preHandle()、postHandle()和afterCompletion(),通过复写这 3 个方法来对用户的请求进行拦截处理。
1)preHandle方法,该方法在请求处理之前进行调用。当它返回为 false 时,表示请求结束,后续的 Interceptor 和 Controller 都不会再执行;当返回值为 true 时,就会继续调用下一个 Interceptor 的 preHandle 方法,如果已经是最后一个 Interceptor 的时候,就会调用当前请求的 Controller 中的方法。
2)postHandle方法在在当前所属的 Interceptor 的 preHandle 方法的返回值为 true 的时候,才能被调用。
当前请求被处理之后,也就是在 Controller 中的方法调用之后执行,但是它会在 DispatcherServlet 进行视图返回渲染之前被调用,所以可以在这个方法中对 Controller 处理之后的 ModelAndView 对象进行操作。
postHandle 方法被调用的方向跟 preHandle 是相反的,先声明的 postHandle 方法反而会后执行。
3)afterCompletion方法,也是需要当前对应的 Interceptor 的 preHandle 方法的返回值为 true 时才会执行。因此,该方法将在整个请求结束之后,也就是在 DispatcherServlet 渲染了对应的视图之后执行,这个方法的主要作用是用于进行资源清理的工作。
(2)WebRequestInterceptor 接口
在此接口中也定义了 3 个方法,同HandlerInterceptor接口完全相同,也需要复写这 3 个方法来对用户的请求进行拦截处理。而且这 3 个方法都传递了同一个参数 WebRequest。
它里面的方法定义跟 HttpServletRequest 类似,在WebRequestInterceptor中对 WebRequest 进行的所有操作都将同步到 HttpServletRequest 中,然后在当前请求中依次传递。
1)preHandle(WebRequest request)方法,该方法跟 HandlerInterceptor 中的 preHandle 不同,主要区别在于该方法无返回值。因此不能通过返回值决定是否终止请求。其主要作用是进行资源的准备工作。
2)postHandle(WebRequest request, ModelMap model)方法,同样也是在controller之后,视图返回被渲染之前被调用。该方法有两个参数,WebRequest 对象是用于传递整个请求数据的,比如在 preHandle 中准备的数据都可以通过 WebRequest 来传递和访问;
3)afterCompletion(WebRequest request, Exception ex)方法,同样是在视图渲染之后调用,主要用来进行资源的释放。
什么是Filter?
Filter也称之为过滤器,是Servlet的一种技术,WEB开发人员通过Filter技术,可以对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html文件等进行拦截,从而实现一些特殊的功能。
对请求起到过滤的作用,它在监听器之后,作用在servlet之前,对请求进行过滤。
什么是Listener?
Listener也叫监听器,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。
对项目起到监听的作用,它能感知到包括request(请求域),session(会话域)和applicaiton(应用程序)的初始化和属性的变化;
- Filter、Linstener属于Servlet技术
- Interceptor属于框架技术,在structs、springMVC中都有各自的实现
执行顺序:监听器–>过滤器–>拦截器–>controller执行–>拦截器–>过滤器–>监听器
什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?
“明文密码”(Cleartext Password),即传输或保存为明文的密码。具体是指保存密码或网络传送密码的时候,用的是没有隐藏、直接显示的明文字符,而不是经过加密后的密文
密文是加了密的的文字,明文是加密之前的文字。密文是对明文进行加密后的报文。
用明文保存密码有很大的信息安全隐患。
一般数据库里还存有用户的姓名、手机号、用户名等信息,一旦数据库发生泄漏,再加上用户的明文密码,攻击者就可以用用户名和密码去其他网站尝试登陆(因为往往用户会将多个网站的密码根据习惯设成一样的),一旦登陆成功,就会造成更严重的后果。
Cookie的失效时间怎么设定?最大允许存放多少字节?
cookie.setMaxAge(time)方法
0表示立即销毁cookie
-1表示关闭浏览器销毁cookie
大于1是设置的销毁时间,单位是秒,例如1小时后销毁,就可以设置60*60
Cookie有个数和大小的限制,大小一般是4k 浏览器的不同,字节大小限制会有少许的差异
在App中没有Cookie,怎么解决用户身份识别的问题?Token应该放在什么位置?怎么在后端设计的时候,又支持Cookie,又支持Token?
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写 到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。 HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写
将token放在cookie中
什么叫加盐?加盐能解决什么问题?通常的加盐方式有哪些?
“加盐”即为计算机密码加密中常用的"add salt",一般用于在原密码后面追加一些无关字符后在进行不可逆加密(例如MD5)以便增强安全性
提高反解密难度 MD5
什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
主要应用:
一致性验证、数字签名、安全访问认证
不可逆算法即将对象加密成固定长度后,不可解密成原来的数据。
常规的MD5加密。得到的密文是一样的。比如123456.极易发生撞库
拦截器是什么?为什么要配置拦截器?拦截器里通常应该校验什么,怎么做到统一配置拦截器,让必须登录才能使用的接口,判断用户未登录时,返回错误信息?
java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。
配置 dispatch-servlet.xml
<mvc:interceptors>
<!-- 如果在interceptors中配置bean,那么所有定义在这里的bean都会被拦截-->
<!--<bean></bean>-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean
</mvc:interceptor>
</mvc:interceptors>
spring MVC拦截器请求流程
spring请求流程具体如下:
浏览器/客户端发送请求给我们的服务器
请求来到Spring的dispatchServlet进行请求分发
dispatchServlet检查我们在dispatch-servlet.xml定义好的规则,按照规则判断请求是否走拦截器
如果判断请求不走拦截器,请求直接分发到对应的controller(这里默认有对应的controller)
如果判断请求是走拦截器的,就走我们自己实现的拦截器,验证请求,通过就放行,走到controller,反之则提前返回给客户端
Https是什么?怎么配置Https证书,哪些请求需要Https,登录是否需要Https?
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
什么是对称加密技术?
对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密
也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高
什么是非对称加密技术
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
Token的构造规则是什么,怎么确认用户身份的,怎么保证Token被偷窃的问题?
Token是服务器保存在Cookie中的加密过的“标签”,通过验证Token,服务器可以直接给认证过的用户一个登陆状态。
(1)可以将SessionId加密后作为Token,通过对比链接的SessionId来验证
(2)可以将用户设备的MAC地址加密后作为Token,对比请求设备的MAC号来验证。
Cookie是在Http的什么位置存放,Cookie里的键可以重复吗?
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。
若果不设置Cookie的path,则名字相同的Cookie视为相同的Cookie,后面的覆盖前面的,所以不会重复
什么是session?什么是cookie?session和cookie有什么区别?什么场景适用于session?什么场景适用于cookie?
最大的区别是Session是在服务器端的,内容较少,主要是由于我们的请求是无状态的,用来跟踪用户的整个会话。
而Cookie是存储在客户端的,相比于Session,Cookie储存的内容更多,不会给服务器带来更多的压力。但是由于Cookie是保存在客户端的,就存在一个安全的问题
用户可以自己随意更改Cookie的内容。所以,对于安全要求较高的常见,应该尽量依靠Session。而对于用户附带状态信息较多的,更注重用户体验的场景,需要更多的依靠Cookie。
今日问题 暂无
评论