发表于: 2020-06-16 23:33:19
1 1875
今天完成的事情:
1. 修复了昨天遇到的页面 bug
静态资源访问的问题
2. 对 cookie session 里的信息进行加密
收获:
1. 为什么静态资源没有被 servlet 拦截
因为我的 servlet 拦截的是 *.do,所有非 .do 结尾的资源都不会被 servlet 拦截、处理。而是被当作静态资源,直接到 webapp 下的对应路径访问,找不到路径就 404 。
2. 静态资源使用相对路径导致访问失败的处理方式
本来我的静态资源采用的都是相对路径:
<link href="/css/bootstrap.min.css" rel="stylesheet" type="text/css">
出问题的原因:
静态资源都放在 webapp 下的对应目录里面,做任务四的时候两个页面使用的是同一个 controller 类,用起来是没有问题的。
在任务五中按照要求有一个页面的路径要加上 /u/,这就导致了这个页面的所有静态资源的访问路径前都加上了 /u/ 路径,而 webapp 下是显然没有这个路径的,所以静态资源访问不到。
解决的方法:
a,servlet 拦截所有的访问包括静态资源,配置 <mvc:resources mapping="/css/*" location="/css/"/> 实现动静分离。要解决昨天 url 中拼接了其他路径的问题只能是多加几个 <mvc:resources>。
<mvc:resources mapping="/css/*" location="/css/"/>
<mvc:resources mapping="/imges/*" location="/imges/"/>
<mvc:resources mapping="/js/*" location="/js/"/>
b,servlet 不需要拦截静态资源,在 jsp 中对所有的静态资源链接都加上 ${pageContext.request.contextPath},这样的话链接中就不会被拼接上其他的路径。
<link href="${pageContext.request.contextPath}/css/Untitled-3.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/css/Untitled-1base.css" rel="stylesheet" type="text/css">
最后项目中我采用了方案 b。不论如何我都不想写死 http://localhost:8080/css/****.css 这种链接,问题是能够解决的,但是部署到服务器或者需要更换域名都会特别麻烦。
3. 使用 DES 对 cookie session 中的信息进行加密处理
cookie 在登录的 controller 内部创建,加密了用户名及登陆时间。校验 cookie 数据的时候会比对其内部的时间戳,cookie 时间戳在对应的用户信息数据更新时间与当前时间之间则校验通过。cookie 有效期为 1 天。
session 在拦截器内部校验完 cookie 后创建,加密了用户名与 session 失效时间。校验 session 的时候会比对其内部的时间戳,还在有效期内则通过校验。session 有效期为 10 分钟。
处理逻辑:
4. 登入与登出的逻辑
登出的时候应该清空 session cookie。
登入的时候应该先执行登出逻辑,然后再去校验提交的用户名密码创建 cookie。
5. 为什么需要加盐加密
加密(散列函数,不可逆):防内贼、防脱裤
加盐(随机字符串):防止相同的密码密文一致、防彩虹表、极大的阻碍了暴力破解
在项目中我打算使用 jBCrypt
遇到的问题:
1. session 并非绝对安全,需要防范跨站请求伪造
根据 java 开发手册的要求,需要对表单、AJAX 提交进行 CSRF 校验。这个做任务的时候看到过,争取用上。
2. 登录后的跳转逻辑
当用户在非登录状态下访问了一个需要登录的网页(/u/aaa.html)的时候自动跳转了登录页面(/login.html),登录成功之后应该立即跳转到 /u/aaa.html 继续用户的访问。
这个跳转逻辑在我的项目中没有体现,争取完善。
明天的计划:
1. 对用户密码加盐加密
2. CSRF 校验
评论