zoukankan      html  css  js  c++  java
  • 过滤器

    过滤器就是在请求处理之前,对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>
  • 相关阅读:
    RS-232 vs. TTL Serial Communication(转载)
    UART to Serial Terminal(转载)
    UART Explained(转载)
    Gprinter热敏打印机光栅位图点阵数据解析工具
    WinCE非通用调试工具汇总
    WinCE下GPRS自动拨号软件(GPRS AutoDial)
    WinCE项目应用之车载导航
    mysql创建临时表,将查询结果插入已有的表
    mysql利用navicat导出表结构和表中数据
    mysql查看表的属性 mysql将查询结果给临时变量
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/4030142.html
Copyright © 2011-2022 走看看