首页 > 代码库 > 过滤器

过滤器

web.xml 页面


<!--权限jsp过滤器-->
    <filter >
        <filter-name>jsppermission </filter-name>
        <filter-class>com.weizhi.common.filter.JSPPermissionFilter</filter-class>
    </filter>
    <filter-mapping>
       <filter-name>jsppermission </filter-name>
       <url-pattern>/administrator/*</url-pattern>
    </filter-mapping>
<!--权限action过滤器-->   
    <filter >
        <filter-name>actionpermissiondo </filter-name>
       <filter-class>com.weizhi.common.filter.ActionPermissionFilter</filter-class>
    </filter>

    <filter-mapping>
       <filter-name>actionpermissiondo </filter-name>
       <url-pattern>*.ao</url-pattern>
    </filter-mapping>




*****************************java类*****************************************


package com.weizhi.common.filter;

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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.weizhi.common.domain.WzUser;
import com.weizhi.common.util.CommonConstants;
import com.weizhi.common.util.CommonUtil;




public class ActionPermissionFilter implements Filter{
    public static Log _log = LogFactory.getLog(ActionPermissionFilter.class);
    // 1,doFilter方法的第一个参数为ServletRequest对象。
    
    // 此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。
 
    // 第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。
 
    // 最后一个参数为FilterChain,此参数用来调用servlet或JSP页。

 

    private FilterConfig filterConfig;
 
    private FilterChain chain;
 
    private HttpServletRequest request;
 
    private HttpServletResponse response;
 
    public void destroy() {
 
       this.filterConfig = null;
 
    }
 
    public void init(FilterConfig filterConfig) throws ServletException {
 
       this.filterConfig = filterConfig;
 
    }
 
    public void doFilter(ServletRequest servletRequest,
 
           ServletResponse servletResponse, FilterChain chain) {
        _log.info("进入了Actionfileter");
       this.chain = chain;//束缚
 
       this.request = (HttpServletRequest) servletRequest;
 
       // 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,
 
       // 就要把此request对象构造成HttpServletRequest

 
       this.response = ((HttpServletResponse) servletResponse);
       // 获取当前页面文件名此处url为:/Gzlkh/login.jsp
       String url = request.getRequestURI();
       // 此处截取的url为:login.jsp
       url = url.substring(url.lastIndexOf("/") + 1, url.length());
 
       try {
           HttpSession session = request.getSession();
           // 获取网站访问根目录
           String accessPath = request.getContextPath();
           // 获取用户登录验证信息
           WzUser st = (WzUser)session.getAttribute(CommonConstants.SESSION_USER);
           if (noFileUrl(url, request)) {
              // 不需要判断权限的请求如登录页面,则跳过
              chain.doFilter(request, response);// 继续执行请求
           } else if (st == null) {
              response.sendRedirect(accessPath + "/index.shtml");
              // 未登录或超时,返回登陆页面
           } else {
              verifyUrl(url, st);// 判断当前user是否拥有访问此url的权限
           }
 
       } catch (Exception sx) {
 
           sx.printStackTrace();
 
       }
 
    }
 
    /**
 
     * 判断当前user是否拥有访问此url的权限
 
     * @param url
 
     * 当前请求的url
 
     * @param st
 
     * 当前登录用户信息
     * @throws Exception
 
     */
 
    private   void verifyUrl(String url, WzUser st) throws Exception {
        
         boolean isqiantai = CommonUtil.hasexistingroup(st.getUserId(), "前台用户组");
        boolean ishoutai = CommonUtil.hasexistingroup(st.getUserId(), "后台用户组");
           //以下判断用户是否有进入该页面的权限,有则加入
           if ((request.getRequestURI().contains("abc") && isqiantai)||request.getRequestURI().contains("123") ||request.getRequestURI().contains("okm") ) {
               chain.doFilter(request, response);
           }else
           if (ishoutai && !request.getRequestURI().contains("front")) {
               chain.doFilter(request, response);
           }
           else {
               //用户无权限跳转提示
               response.setContentType("text/html;charset=GBK");
               response.getWriter().println("<div style=‘margin: 100 auto;text-align: center;  "
               + "font: bold 18px 宋体;color: #0066CC;vertical-align: middle‘> Sorry,您没有权限访问该资源!</div>");
           }
    }
 
    /**
 
     * 特殊页面判断
 
     * 是否需要判断权限,如客户端浏览、登录页面则不需要判断权限
 
     */
 

    protected boolean noFileUrl(String url, HttpServletRequest request) {
 
       //不需要权限验证的页面动作等
        _log.info("url="+url);
       String exclude = "login.do";
 
        //判断请求页面是否是特殊页面
 
        if (exclude.indexOf(url) >= 0
                || "imageaction.do".indexOf(url) >= 0
            ) {
           return true;
       }
       return false;
    }
}

本文出自 “二进制转换” 博客,请务必保留此出处http://pangxiong.blog.51cto.com/9560480/1586320

过滤器