• j2ee过滤器实现的主要代码


    首先实现Filter接口(该实例是用于判断session中是否存在用户)

    package com.xinzhi.filter;
    
    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.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class LoginFilter implements Filter {
        public void destroy() {
        }
    
        public void doFilter(ServletRequest req, ServletResponse res,
                FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            // 1. 获取请求资源,截取
            String uri = request.getRequestURI(); // /emp_sys/login.jsp
            // 截取 【login.jsp或login】
            String requestPath = uri.substring(uri.lastIndexOf("/") + 1, uri
                    .length());
    
            // 2. 判断: 先放行一些资源:/login.jsp、/login
            if ("LoginServlet".equals(requestPath)
                    || "login.jsp".equals(requestPath)) {
                // 放行
                chain.doFilter(request, response);
            } else {
                // 3. 对其他资源进行拦截
                // 3.1 先获取Session、获取session中的登陆用户(loginInfo)
                HttpSession session = request.getSession(false);
                // 判断
                if (session != null) {
                    Object obj = session.getAttribute("adminname");
                    // 3.2如果获取的内容不为空,说明已经登陆,放行
                    if (obj != null) {
                        // 放行
                        uri = requestPath;
                        // chain.doFilter(request, response);
                    } else {
                        // 3.3如果获取的内容为空,说明没有登陆; 跳转到登陆
                        uri = "jsp/login.jsp";
                    }
    
                } else {
                    // 肯定没有登陆
                    uri = "jsp/login.jsp";
                }
                request.getRequestDispatcher(uri).forward(request, response);
            }
        }
    
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
    
        }
    
    }

    然后要在web.xml配置文件中指定相关信息

    <filter>
            <filter-name>filter</filter-name>
            <filter-class>com.xinzhi.filter.LoginFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>filter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
  • 相关阅读:
    .NET平台系列18 .NET5的超强优势
    .NET平台系列17 .NET5中的ARM64性能
    .NET平台系列19 新世界中的.NET大统一平台架构解析
    .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现
    .NET平台系列15 .NET5的吊炸天性能改进
    .NET平台系列14 .NET5中的新增功能
    从零开始学Typescript-类型注解
    从零开始学Typescript-第一个TS程序
    从零开始学Typescript-安装Typescript
    从零开始学VUE-创建VUE应用
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/6896545.html
Copyright © 2020-2023  润新知