Maison > Java > javaDidacticiel > Quelles sont les fonctions, les types et les scénarios d'application de Filter en Java ?

Quelles sont les fonctions, les types et les scénarios d'application de Filter en Java ?

王林
Libérer: 2023-05-26 10:26:52
avant
1234 Les gens l'ont consulté

    Comment utiliser Filter

    Dans les applications Web Java, utiliser Filter est très simple, il suffit d'écrire une classe pour implémenter javax .servlet.Filter, puis configurez Filter dans le fichier de configuration web.xml pour utiliser Filter. Voici un exemple de code de filtre :

    public class MyFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
            // 初始化操作
        }
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            // 过滤器逻辑处理
            chain.doFilter(request, response);
        }
        public void destroy() {
            // 销毁操作
        }
    }
    Copier après la connexion

    Configurez le filtre dans le fichier de configuration web.xml :

    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.example.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    Copier après la connexion

    La balise nom du filtre et du chemin de classe, la balise spécifie les règles de mappage du filtre, c'est-à-dire les URL que le filtre intercepte.

    Le cycle de vie du filtre

    Le cycle de vie du filtre comporte trois méthodes : init(), doFilter() et destroy().

    Méthode init() : appelée lors de la création du Filtre, utilisée pour initialiser le Filtre. Cette méthode ne sera appelée qu'une seule fois.

    Lorsque l'intercepteur capture chaque requête, la méthode doFilter() est appelée pour traiter la requête et la réponse. Si vous devez continuer à exécuter le filtre suivant, vous devez appeler la méthode chain.doFilter(request, réponse), sinon vous n'avez pas besoin d'appeler cette méthode.

    destroy() méthode : appelée lorsque le Filtre est détruit, utilisée pour libérer des ressources.

    Ordre d'exécution des filtres

    Dans le fichier de configuration web.xml, vous pouvez configurer plusieurs filtres, et leur ordre d'exécution est exécuté en séquence dans l'ordre défini dans le fichier de configuration. Par exemple :

    <filter>
        <filter-name>FilterA</filter-name>
        <filter-class>com.example.FilterA</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterA</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>FilterB</filter-name>
        <filter-class>com.example.FilterB</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterB</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    Copier après la connexion

    Dans la configuration ci-dessus, FilterA sera exécuté en premier, puis FilterB sera exécuté.

    Détails du filtre

    Connexion automatique

    Dans les applications Web, il est généralement nécessaire d'implémenter la fonction de connexion automatique, c'est-à-dire une fois que l'utilisateur a réussi se connecte, la prochaine fois Il n'est pas nécessaire de saisir à nouveau le nom d'utilisateur et le mot de passe lors de l'accès, il suffit d'accéder directement. Ce qui suit est une idée simple de connexion automatique :

    • Lorsque l'utilisateur se connecte, le nom d'utilisateur et le mot de passe sont enregistrés dans Cookie.

    • Déterminez si l'utilisateur s'est connecté dans le filtre. Sinon, déterminez s'il y a un cookie. Si un cookie existe, renseignez automatiquement le nom d'utilisateur et le mot de passe. le cookie. Dans le formulaire de connexion, effectuez à nouveau la vérification de la connexion.

    Ce qui suit est un exemple de code simple pour se connecter à Servlet :

    public class LoginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取用户名和密码
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            // 验证用户名和密码
            if ("admin".equals(username) && "123456".equals(password)) {
                // 登录成功,保存用户信息到Session中
                HttpSession session = request.getSession();
                session.setAttribute("username", username);
                // 保存自动登录信息到Cookie中
                Cookie cookie = new Cookie("autologin", username + ":" + password);
                cookie.setMaxAge(7 * 24 * 60 * 60); // 设置Cookie过期时间为一周
                response.addCookie(cookie);
                // 跳转到首页
                response.sendRedirect(request.getContextPath() + "/index.jsp");
            } else {
                // 登录失败,返回登录页面
                response.sendRedirect(request.getContextPath() + "/login.jsp");
            }
        }
    }
    Copier après la connexion

    Ce qui suit est un exemple de code simple pour le filtre de connexion automatique : # 🎜 🎜#

    public class AutoLoginFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
            // 初始化操作
        }
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            // 判断用户是否已经登录
            HttpSession session = ((HttpServletRequest) request).getSession();
            String username = (String) session.getAttribute("username");
            if (username == null) {
                // 判断是否存在Cookie
                Cookie[] cookies = ((HttpServletRequest) request).getCookies();
                if (cookies != null) {
                    for (Cookie cookie : cookies) {
                        if ("autologin".equals(cookie.getName())) {
                            // 自动填充用户名和密码
                            String[] values = cookie.getValue().split(":");
                            String autologinUsername = values[0];
                            String autologinPassword = values[1];
                            request.setAttribute("autologinUsername", autologinUsername);
                            request.setAttribute("autologinPassword", autologinPassword);
                        }
                    }
                }
            }
            chain.doFilter(request, response);
        }
        public void destroy() {
            // 销毁操作
        }
    }
    Copier après la connexion

    Utilisation de BeanUtils

    Dans le développement Web, nous avons généralement besoin de convertir les données de formulaire en objets JavaBean, et cette fonction peut être réalisée à l'aide de la classe d'outils BeanUtils. Utilisez BeanUtils pour encapsuler les données de formulaire dans des objets JavaBean, simplifiant ainsi le traitement des données de formulaire. Voici un exemple d'utilisation de BeanUtils :

    public class UserServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取表单数据
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            int age = Integer.parseInt(request.getParameter("age"));
            // 将数据封装成User对象
            User user = new User();
            try {
                BeanUtils.setProperty(user, "username", username);
                BeanUtils.setProperty(user, "password", password);
                BeanUtils.setProperty(user, "age", age);
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 保存用户信息
            UserService userService = new UserService();
            userService.saveUser(user);
            // 跳转到用户列表页面
            response.sendRedirect(request.getContextPath() + "/user/list.jsp");
        }
    }
    Copier après la connexion
    Dans le code ci-dessus, les données du formulaire sont encapsulées dans un objet User via la méthode BeanUtils.setProperty().

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal