一、登录验证(权限控制)
1、在用户未登录的情况下,只允许用户访问和登录相关的资源。那么对登录相关的资源我们需要进行判断后放行
(如:login.jsp、 LoginServlet、 CheckCodeServlet、 css、 js、 fonts、 可能还会有一些图片等)
2、如果用户访问的为登录资源,直接放行
3、如果用户访问的为必须登录后的资源,那么必须在过滤器中通过session判断用户是否已经登录
本例包含一个index.jsp页面,一个login.jsp页面,一个LoginFilter。配置LoginFilter用于拦截index.jsp,当用户访问index.jsp页面时,如果未登录,则重定向到login.jsp进行登录。
1 | "/index.jsp") ( |
通过上述案例就能够实现当用户访问index.jsp时,判断用户是否已经登录从而来进行相应的操作。
当然在实际开法中,不可能只对一个页面进行登录验证。
此时我们只需要修改登录验证的范围,对除了登录以外的所有页面都进行登录验证即可。
二、敏感词汇过滤器
如果用户输入了敏感词(傻b、尼玛、操蛋等等不文明语言时),我们要将这些不文明词汇屏蔽掉,替换成符号!
要实现这样的功能也很简单,用户输入的敏感词肯定是在getParameter()或其他获取参数的方法获取的,我们在getParameter()得到这些数据的时候,判断有没有敏感词汇,如果有就替换掉就好了!简单来说:就是要增强request对象
通常我们都是选择代理设计模式或者装饰设计模式来对某个对象的某些方法进行增强
关于代理设计模式可点击此处
此处我选择的是使用代理模式中的动态代理来实现
1 | "/*") ( |
用来存储敏感词汇的SensitiveWords文件其实就是一个txt文件,位于src目录下。
注意:在练习本案例时遇到一个小问题:
在加载敏感词汇文件时,加载进来的词汇总是乱码。
后来通常查找才知道原来使用BufferedReader读取文件时,默认都是使用的GBK编码,而我的文件为UTF-8格式。
这个问题其实两种解决办法:
1、将文件转换为GBK。这种方法方便且快速,但是会导致和项目编码不一致
2、使用InputStreamReader以指定的编码读取文件
更多关于Filter的案例:过滤器应用【编码、敏感词、压缩、转义过滤器】(修订版)
Java新手,若有错误,欢迎指正!