java之web开发过滤器

我们通常上网的时候都会遇到一个问题,看到一个视频之类的,想要点开观看,点击之后,网页

提醒你:您尚未登录,是否要登录?然后巴拉巴拉跑去输账号密码。

那么这就是一个过滤器的功能,当你要访问一个资源的时候(通常理解为链接),服务器会进行

分析,当前的访问者是否符合一定条件(通常就是检测一下是不是会员,是否已经登录),符合

条件的话,服务器会跳转到指定链接,不满足的话也会友情提醒:您不是会员,您尚未登录等等。

如何实现呢,还是以用户登录为例子吧,看下面~~~

1.三个页面

登录页面,登录成功页面,登录失败页面

login.jsp---loginsuccess.jsp---loginwrong.jsp

2.实现Filter接口的类

这个java文件实现了Filter接口,并且设定了规则,并且还有配置文件

 1 public void doFilter(ServletRequest arg0, ServletResponse arg1,
 2             FilterChain arg2) throws IOException, ServletException {
 3         HttpServletRequest request = (HttpServletRequest) arg0;
 4         HttpServletResponse response = (HttpServletResponse) arg1;
 5         request.setCharacterEncoding("utf-8");// 设置请求编码
 6         response.setCharacterEncoding("utf-8");// 设置响应编码
 7         HttpSession session = request.getSession();//session对象,用于存储表单数据
 8         String username = request.getParameter("username");
 9         String password = request.getParameter("password");
10         session.setAttribute("username", username);
11         session.setAttribute("password", password);
12         System.out.println("密码:" + password);
13         System.out.println("账号:" + session.getAttribute("username"));
14         if (username != null && password != null) {
15             if (username.equals("admin") && password.equals("admin")) {
16                 arg2.doFilter(arg0, arg1);// 满足条件放行,跳转到表单想要到达的页面loginsuccess.jsp
17             } else {
18                 request.getRequestDispatcher("loginwrong.jsp").forward(request,
19                         arg1);// 不满足条件,转到loginwrong页面
20             }
21         }
22     }

配置文件规定了此规则适用于客户端对哪个页面访问时,调用规则

1     <filter>
2         <filter-name>logfilter</filter-name>
3         <filter-class>Filter.Servletfilter</filter-class>
4     </filter>
5     <filter-mapping>
6         <filter-name>logfilter</filter-name>
7         <url-pattern>/loginsuccess.jsp</url-pattern>
8     </filter-mapping>

filter-name自定义,不过规则与适用的页面要一一对应,过滤规则类文件要包名+文件名形式书写,

这个文件的意思就是说,当用用户要访问loginsuccess.jsp页面时,过滤器Servletfilter进行拦截,然后

结合规则来看,如果用户的用户名和密码都是admin的话,服务器直接跳转到loginsuccess.jsp页面,

账号和密码不对的话,服务器跳转到loginwrong.jsp页面。

注意:用户提交表单,发送请求之后,请求被过滤器拦截,此时要设置请求和响应的字符编码,防止

后面用到数据的时候造成输出乱码。设置方法在过滤器源码已经用红字标出。

原文地址:https://www.cnblogs.com/eco-just/p/7811326.html