Servlet过滤器学习记录

来源:互联网 发布:淘宝 河北邢台 羊绒 编辑:程序博客网 时间:2024/05/18 01:07

学习目标

配置一个过滤器来检查用户是否登录,若未登录则跳转到登录界面

1.首先写三个页面

1) index.jsp就一个表单,用来用户名密码接收

这里写图片描述

2) suceess.jsp登录成功

这里写图片描述

3)登录失败

这里写图片描述

2.然后写一个控制登录跳转的 Servlet

public class LoginServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request,response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        //取出用户名密码        String username=request.getParameter("username");        String password=request.getParameter("password");        //简单的判断处理是否为“admin”,然后跳转if("admin".equals(username) && "admin".equals(password)){//存入Session留作过滤器来判断           request.getSession().setAttribute("username", username);            response.sendRedirect(request.getContextPath()+"/success.jsp");}else  {            response.sendRedirect(request.getContextPath()+"/failure.jsp");      }   }}

3.开始写过滤器LoginFilter

public class LoginFilter implements Filter {    private FilterConfig config;    //用来获取过滤器的初始化参数    @Override    public void destroy() {        // TODO Auto-generated method stub    }    @Override      public void doFilter(ServletRequest arg0, ServletResponse arg1,            FilterChain arg2) throws IOException, ServletException {        HttpServletRequest request=(HttpServletRequest)arg0;        HttpServletResponse response=(HttpServletResponse)arg1;        HttpSession session=request.getSession();        //取出配置web.xml中的初始化参数,noLogin参数则是不用过滤的页面的字符串        String noLogin=this.config.getInitParameter("noLoginPaths");        //初始化参数中也可以用来配置字符编码        String charset=this.config.getInitParameter("charset");        if(charset==null){            charset="utf-8";        }        request.setCharacterEncoding(charset);        if(noLogin!=null){            String[] arr=noLogin.split(";");            for(int i=0;i<arr.length;i++){                if(arr[i]==null || "".equals(arr[i])) continue;         //跳过空字符串                if(request.getRequestURI().indexOf(arr[i])!=-1){        //如果初始化参数中有该页面地址,则过滤器放行,不再循环                    arg2.doFilter(arg0, arg1);                    return;                }            }        }        if(session.getAttribute("username")!=null){            arg2.doFilter(arg0, arg1);  //放行,交给Servlet处理        }else{            //不放行,跳转到登录页面            response.sendRedirect("index.jsp");        }    }    @Override    public void init(FilterConfig arg0) throws ServletException {        // TODO Auto-generated method stub        this.config=arg0;//fiter的初始化参数    }}

4.配置web.xml 这一步里面有过滤器的初始化参数的设置

<servlet-mapping>    <servlet-name>LoginServlet</servlet-name>    <url-pattern>/servlet/LoginServlet</url-pattern>  </servlet-mapping>    <filter>        <filter-name>LoginFilter</filter-name>        <filter-class>filter.LoginFilter</filter-class>        <init-param>            <param-name>noLoginPaths</param-name>            <param-value>               index.jsp;failure.jsp;LoginServlet            </param-value>        </init-param>        <init-param>            <param-name>charset</param-name>            <param-value>utf-8</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>LoginFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

完成之后输入其他一些地址测试一下,只要未登录,或者非正常跳转到success.jsp都会直接跳转到登录界面了。

0 0
原创粉丝点击