Servlet-过滤器

来源:互联网 发布:java的webservice 编辑:程序博客网 时间:2024/06/06 03:13

在Web应用开发中的过滤器截取从客户端进来的请求,并做出处理的答复

过滤器在WEB应用开发中的常见应用

可以对客户提交的数据进行重新编码可以从系统里获得配置的信息可以过滤掉客户的屏蔽非法文字可以验证客户是否已经登录

过滤器可以部署多个组成一个过滤链,每个过滤器只执行某个特定的操作或者检查,这样请求在达到被访问的目标前,需要经过这个过滤链。如果安全的问题不能访问目标资源,那么过滤器可以把客户端的请求拦截。

实现一个过滤器

1.所有的Servlet过滤器类都必须实现javax.servlet.Filter接口 2.在web.xml中部署过滤器3.init(FilterConfig)初始化方法,读取Web.xml文件中servlet过滤器的初始化参数4.doFilter(ServletRequest,ServletResponse,FilterChain);--这个方法完成实际的过滤器操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter()方法,FilterChain参数用于访问后续过滤器5.destroy()方法:Servlet容器在销毁过滤器实例前调用该方法,在这个方法中可以释放Servlet过滤器占用的资源

代码实现

web.xml

<!-- 配置拦截过滤器 -->  <filter>    <filter-name>LoginFilter</filter-name>    <filter-class>com.kaner.bbs.filter.LoginFilter</filter-class>    <init-param>        <param-name>noLoginPaths</param-name>        <param-value>login.jsp;reg.jsp;imageServlet;regServlet;checkUsernameServlet</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>LoginFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

LoginFilter

public class LoginFilter implements Filter{    private FilterConfig config;    @Override    public void destroy() {    }    @Override    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)            throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        request.setCharacterEncoding("utf-8");        HttpServletResponse response = (HttpServletResponse) resp;        response.setContentType("text/html;charset=utf-8");        HttpSession session = request.getSession();        String noLoginPaths = config.getInitParameter("noLoginPaths");        if (config != null) {            String[] noLoginPathArray = noLoginPaths.split(";");            for (int i = 0; i < noLoginPathArray.length; i++) {                String noLoginPath = noLoginPathArray[i];                if (noLoginPath==null && "".equals(noLoginPath)) {                    continue;                }else{                    chain.doFilter(request, response);                    return;                }            }        }        if (session.getAttribute("username") != null) {            chain.doFilter(req, resp);        }else{            response.sendRedirect("login.jsp");        }    }    @Override    public void init(FilterConfig arg0) throws ServletException {        config = arg0;    }}

以上是实现了一个拦截过滤器只有登陆过后才能访问其他请求

原创粉丝点击