王刘锁
2018-6-15-->Filter-->过滤器-->在数据使用途中拦截数据来做一些操作判断数据的合法性一类的,
第一个案例是自动登录的案例,一开始写的时候发现没用到Filter过滤器,在学习了过滤器后思路一下
通了,第一次直接在jsp中用Java代码实现了自动登录,毕竟在jsp中写Java代码不好,因此又用过滤器敲
了一遍,代码没有陌生的地方,主要整理一下思路,我是自己重新写一个简单的登录页面和首页,然后提
交信息到后台,判断是否登陆成功,登陆成功就把user存到session域中,在首页取出判断是否登录,登录
了就显示页面,没登录跳到登录页面提示登录,在登录成功的时候我们还要判断用户是否勾选自动登录,
获取到复选框的值判断是否为true,为true就把用户的信息存到cookie中,这样就可以给cookie设置有
效路径和存活时间,这是实现自动登录的关键,当重新启动浏览器的时候会携带存储用户信息的cookie,
再次访问首页的时候就可以在访问前用过滤器拦截,在过滤器中先判断session中是否有user,如果没有
关闭浏览器session会有user这时直接放行到首页,因为在首页会先判断session中是否有user再去显示
页面,如果session中没有user再去cookie中查看,获取所有的cookie,利用之前定义的cookie工具类传
入cookie数组和cookie名返回一个cookie对象,判断这个对象是否为空,cookie为空说明没有存cookie,
当用户没有选择自动登录的时候就不会执行上面的存cookie的步骤,这时直接放行会提示登录并跳回登
录界面,如果cookie不是空说明选择了自动登录,为了防止传cookie的时候有意外发生或恶意串改了用
户信息,还需要获取cookie中的数据,根据数据去数据库确认是否有此数据,返回user对象,判断user是
否为空,不为空存道session中再放行就可以去首页了,user为空也可以直接放行会提示登录并跳转到登
录界面,这个过滤器的内容就这些,难点在于逻辑上的嵌套,把几个判断理清了就很简单的,
第二个案例是通用的处理编码问题的过滤器,这个案例要求理解思路,要知道我们再处理编码问题的时
候是根据请求方式不同处理的格式也有不同的,为了不每次都去处理编码,想要做到直接获取参数的效
果需要去重写增强获取参数的getParameter方法.在过滤器中把request强转成HTTPServletRequest才
能获取请求方式,但是不在过滤器中获取,需要定义一个类去继承HttpServletRequestWrapper这个模板
类,该类实现了HTTPServletRequest接口,因此继承该类不需要实现全部接口方法,只需要重写增强
getParameter方法,在方法中获取请求方式并判断,根据不同请求方式去做编码的处理,get方法处理完
后把数据return即可,post方式处理完调用父类getparameter方法获取数据即可,然后在过滤器中创建
这个自己定义的增强后的request对象,并用该对象放行,这时后台用的request就是增强后的了, |