过滤器主要有三种作用,即:字符转码,权限设定和敏感字处理。。
(1)字符转码:在写博客,发帖子,写评论等的地方,我们发的一定是中文的,但是在编程的时候,很多都是不能识别中文的。。那我们就要用到过滤器,把应该输入,能识别中文的地方过滤一下。新建一个Filter 实现javax的Filter接口,在DoFilter的方法里面写中文处理的方法。当然要在web.xml中进行设置,这样我们在被过滤的方法里就能输出中文了。
public class CharFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
(2)权限设定:比如在博客中发博文的时候,不登录是不能发博文的,那我么就要对用户登录还是没登录作下筛选过滤。方法和字符转码的一样,不同的只是DoFilter中得方法和web.xml中得设置。 以下就是判断用户是否登录的Filter:
public class AuthFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
Bloger b=(Bloger)req.getSession().getAttribute("bloger");
if(b==null){
request.getRequestDispatcher("login.jsp").forward(request,response);
}
else{
chain.doFilter(request, response);
}
}
(3)敏感字处理:在论坛中,敏感字是绝对不会被发布的,会被屏蔽成***。
public class HxFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String content = request.getParameter("content");
content = content.replace("敏感字", "***");
request.setAttribute("content", content);
chain.doFilter(request, response);
}
这里要注意的是:既然在DoFilter中进行了request.setAttribute接收被转换的content,那么在Servlet中接收的当然应该是String content=(String)request.getAttribute("content");而不是request.getParameter得到的。。