发表于: 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 校验



返回列表 返回列表
评论

    分享到