首页 > 代码库 > 过滤器

过滤器

过滤器就是在请求处理之前,对URL 进行判断,在这里可以进行权限的过滤,将不具有权限访问的用户过滤掉,但是经常我们也可以使用拦截器进行类似的操作,其实过滤器和拦截器的区别挺大的。

我在这里只从一点说明。

 

过滤器是配置在web.xml中的,配置在web.xml中的一般是全局的,往往只是被初始化一次,而此后一直就会不断的调用其里面的doFilter方法和Servlet在这点上很类似。

而拦截器是配置在struts的配置文件中的,它可以初始化很多次。只要有符合的请求,它就创建。

 

拦截器

 

package com.baitw.struts.utils;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;/** *  * 权限过滤器 *  * */public class AuthorityFilter implements Filter {    private FilterConfig config;        //过滤器核心方法    public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        // TODO Auto-generated method stub        //获取Filter配置参数        String encoding=config.getInitParameter("encoding");        String loginPage=config.getInitParameter("loginPage");        String proLogin=config.getInitParameter("proLogin");        //设置request编码        request.setCharacterEncoding(encoding);        HttpServletRequest requ=(HttpServletRequest) request;        HttpSession session=requ.getSession(true);        //获取客户请求页面        String requestPath=requ.getServletPath();        /*        //获取cookie        Cookie[] cookies=requ.getCookies();        Cookie c=cookies[0];        String val=c.getValue();        */        /**         * 如果session范围内的user为null,即表明没有登录         * 且用户请求的既不是登录页面,也不是处理登录页面         * */        if(session.getAttribute("username")==null                &&!requestPath.endsWith(loginPage)                &&!requestPath.endsWith(proLogin)                ){            System.out.println("权限拦截器的消息:"+"终止");            request.getRequestDispatcher(loginPage)            .forward(request, response);        }else{            System.out.println("权限拦截器的消息:"+"放行");            chain.doFilter(request, response);        }    }    public void init(FilterConfig config) throws ServletException {        // TODO Auto-generated method stub        this.config=config;    }        public void destroy() {        // TODO Auto-generated method stub        this.config=null;    }}

 

 

<!-- 权限拦截器  -->    <filter>        <filter-name>authority</filter-name>        <filter-class>com.baitw.struts.utils.AuthorityFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>GBK</param-value>        </init-param>        <init-param>            <param-name>loginPage</param-name>            <param-value>/view/login.jsp</param-value>        </init-param>        <init-param>            <param-name>proLogin</param-name>            <param-value>/view/admin/main.jsp</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>authority</filter-name>        <url-pattern>/admin/*</url-pattern>    </filter-mapping>

 

过滤器