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>
时间: 2024-08-11 01:19:18

j2ee过滤器实现的主要代码的相关文章

Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档

前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. 本文完整项目文件代码下载地址:完整示例 Django完整内置过滤器帮助文档:Django内置过滤器完整版 参考文献:Django 中文文档 1.8 内置过滤器 注意:所有带参数的过滤器,在使用时,冒号:和参数中间不能有空格. add加 功能: 把add后的参数num加给value: 数字相加会进行算

ASP.NET Core 使用过滤器移除重复代码

USING ACTIONFILTERS TO REMOVE DUPLICATED CODE ASP.NET Core 的过滤器可以让我们在请求管道的特定状态之前或之后运行一些代码.因此如果我们的 action 中有重复验证的话,可以使用它来简化验证操作. 当我们在 action 方法中处理 PUT 或者 POST 请求时,我们需要验证我们的模型对象是否符合我们的预期.作为结果,这将导致我们的验证代码重复,我们希望避免出现这种情况,(基本上,我们应该尽我们所能避免出现任何代码重复.)我们可以在代码

核心J2EE模式 - 截取过滤器

核心J2EE模式 - 截取过滤器 背景 呈现层请求处理机制接收许多不同类型的请求,这些请求需要不同类型的处理.一些请求被简单转发到适当的处理程序组件,而其他请求必须在进一步处理之前进行修改,审核或未压缩. 存在的问题 需要预处理和后处理客户端Web请求和响应. 当请求进入Web应用程序时,它通常必须在主处理阶段之前通过几个入口测试.例如, 客户端是否经过身份验证? 客户端是否有有效的会话? 客户端的IP地址是否受信任的网络? 请求路径是否违反任何约束? 客户端使用什么编码来发送数据? 我们是否支

MVC过滤器使用案例:统一处理异常顺道精简代码

重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并通过对异常处理的封装达到精简代码的目的.具体有两种处理方法: 方法1:封装一个包含try{}catch{}finally{}的异常处理逻辑的方法类,将别的方法作为参数传入该方法,在页面内调用封装后的方法,大体代码如下: public class Process { public static bool Exe

Servlet字符编码过滤器

在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象.由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用的业务处理中也会使用ISO-8859-1编码格式.虽然浏览器提交的请求使用的是中文编码格式UTF-8,但经过业务处理中的ISO-8859-1编码,仍然会出现中文乱码现象.解决此问题的方法非常简单,在业务处理中重新指定中文字符集进行编码即可解决.在实际的开发过程中,如果通过每一个业务处理指定中文字符集

过滤器 &amp; 装饰者模式

一.过滤器概述    ------------------------------------------------    1.1.什么是过滤器?        Servlet技术规范中, 定义了Servlet.Filter.Listener三门技术, 其中Filter也叫做过滤器,通过过滤器技术,开发人员可以实现用户在访问某个资源之前或之后,对访问的请求和响应进行拦截,从而做一些相关的处理. 过滤器:            ◇ 所谓的过滤器, 就是拦截用户对资源的访问            

phalcon模板引擎(volt)自定义过滤器

引子:今天遇到一个问题,模板中某些变量有时候没有定义,如果php开启了E_ALL报错级别,那么会出现一个notice,提示变量未定义. 一开始的想法是通过三元表达式( )来给每个变量设定一个默认值,后来发现这种写法太繁琐,而且与volt标签格格不入. 再后来想到屏蔽E_NOTICE报告,但开发环境下还是很不恰当的. 最后发现volt引擎有一个过滤器Filters功能,解决了这个问题,写法如:{{ var|default('str') }} ,在$var为空的时候,将会将该处设置为str,当然,s

ASP.NET Web API 过滤器创建、执行过程(一)

前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就如今天的这个篇幅就是在上面内容之后所看到的一个知识要点之一. ASP.NET Web API 过滤器创建.执行过程(一) 下面就来讲解一下在ASP.NET Web API框架中过滤器的创建.执行过程. 过滤器所在的位置 图1 图1所示的就是控制器执行过程很粗略的表示. 通过上一篇内容我们了解到控制器方法选择器最后返回的并不是控制器方法,而是对于控制器方法描述

过滤器与监听器知识总结

过滤器 什么是过滤器? 过滤器是servlet2.3规范中定义的一种小型的.可插入的Web组件.用来拦截Servlet容器的请求和响应过程.以便查看.提取或以某种方式操作正在客户机和服务器之间交换的数据. 过滤器通常是封装了一些功能的Web组件,这些功能很重要,但对于处理客户端请求或发送响应来说不是决定性的. 典型的应用包括记录请求和响应的数据.管理会话属性等. 如何编写过滤器? 1.编写一个java类,实现Filter接口: --  过滤器API中有3个常用的接口,位于javax,Servle