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>
  • 相关阅读:
    LeetCode【709. 转换成小写字母】
    静态方法、变量与实例方法、变量之比较心得
    用户控件自定义 DependencyProperty 属性使用教程
    TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
    ABP 框架实战系列(三)-领域层深入篇
    ABP 框架实战系列(二)- 领域层介绍篇
    ABP框架实战系列(一)-持久层介绍篇
    EF Core 基础知识
    EF Core Migration 报错:An error occurred using the connection to database '' on server '10.28.253.2'
    2020年总结:互联网思维下的工业软件开发
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/4030142.html
Copyright © 2011-2022 走看看