post请求乱码好解决,但是get请求如果在过滤器中使用手动编解码,会出问题。因为只是改变了过滤器中的局部变量,接收请求的Servlet还是会从request作用域中取请求参数。
解决方案:
1、将改完的值存到某个地方,用的时候拿出来
利用request.getParameterMap方法得到的Map集合,修改其中的字符串,然后从这个Map集合中拿修改后的正确字符串。
2、request里面存的就是解决好的字符串,从request中去拿。
装饰者模式:增强了被装饰者的功能而不改变被装饰者。
我们在过滤器中写一个MyRequest类继承HttpServletRequestWrapper,重写其中的public String getParameter(String name)、public Map<String, String[]> getParameterMap()和public String[] getParameterValues(String name)方法,在public Map<String, String[]> getParameterMap()方法中解决乱码,在另外两个方法中调用这个方法。
用户实现30天自动登录
本质上是基于Cookie的,用户在登录成功之后,过滤器将用户的用户名和密码存储在Cookie中,发送给服务器。服务器上的过滤器将用户的用户名和密码存储到Session中,并且设置Cookie的有效时间为30天。由于Session是基于Cookie的,所以就可以实现用户30天自动登录了。
MD5加密算法
将用户的用户名和密码保存在客户端是十分危险的,所以我们需要将用户的数据加密后保存在数据库中。这时候就需要用到MD5加密算法了。
特点:
任意大小的二进制数进过MD5加密计算后都能得到一个独一无二的128位二进制数。
不同的数据算出的MD5绝对不同(其实不是这样,密文的数量虽然很大,但是毕竟有限,所有的明文都是从密文的集合中取出密文)
相同的数据算出的MD5一定相同(这也就解释了MD5又被人们称之为数据指纹的原因)
只能由明文算出密文,密文是永远无法算成明文的。MD5大量应用于计算机中。如数据库中保存的密码通常都是经过MD5加密后的数据。如用户下载文件时可以进行MD5校验防止数据被篡改。
记住用户名案例中,我们可以使用MD5进行加密后再保存在客户端,从而保证数据安全。
在数据库中保存的密码也不宜直接存储为明文。也要经过MD5加密后存储。