过滤器就是在请求处理之前,对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>

 

posted on 2014-10-17 08:43  醉意人间  阅读(180)  评论(0编辑  收藏  举报