`
fuyun369
  • 浏览: 31094 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

过滤器的应用

阅读更多
其实很多的JavaWEB开发并没有用到框架,也能够保证一定的安全性和效率.今天学习了一下过滤器,对用户进行统一的验证和对请求和响应的数据进行替换,屏蔽一些不雅的字句.在进行JavaWEB开发的时候,不用框架,写一些使用过滤器,我个人认为绝对能够满足应用的需求.
过滤器在WEB开发中的应用具体包括:
1 对用户进行统一的认证
2 对用户的访问请求进行记录和审核
3 对用户发送的数据进行过滤或替换
4 转换图像格式
5 对相应内容进行压缩,减少传输量
6 对请求和相应进行加密处理
7 触发资源访问事件
8 对XML的输出应用XSLT
我把第一点对用户进行统一的认证的代码贴出来
package org.sunxin.lesson.jsp.ch20;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogonFilter implements Filter
{
    private static final String LOGON_URI="logon_uri";
    private static final String HOME_URI="home_uri";
   
    private String logon_page;   
    private String home_page;
   
    public void init(FilterConfig filterConfig) throws ServletException
    {  
        //从部署描述符中获取登录页面和首页的URI。
        logon_page=filterConfig.getInitParameter(LOGON_URI);
        home_page=filterConfig.getInitParameter(HOME_URI);
       
        if(null==logon_page || null==home_page)
            throw new ServletException("没有指定登录页面或主页!");
    }
  
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain)
                  throws IOException, ServletException
    {
        //将请求对象和响应对象的类型转换为
        //HttpServletRequest和HttpServletResponse。
        HttpServletRequest httpReq=(HttpServletRequest)request;
        HttpServletResponse httpResp=(HttpServletResponse)response;
        HttpSession session=httpReq.getSession();
       
        //得到用户的请求URI。
        String request_uri=httpReq.getRequestURI();
        //得到Web应用程序的上下文路径。
        String ctxPath=httpReq.getContextPath();
        //去除上下文路径,得到剩余部分的路径。
        String uri=request_uri.substring(ctxPath.length());
       
        //判断用户访问的是否是登录页面
        if(logon_page.equals(uri))
        {
            //如果是登录页面,则通过查看是否有附加的请求参数,来判断用户
            //是访问登录页面,还是提交登录信息。
            String strLogon=httpReq.getParameter("action");
           
            if("logon".equals(strLogon))
            {
                //如果是提交登录信息,则对用户进行验证。
                String name=httpReq.getParameter("name");
                String password=httpReq.getParameter("password");
               
                if("zhangsan".equals(name) && "1234".equals(password))
                {
                    //验证通过后,在Session对象中设置isLogon属性为true。
                    session.setAttribute("isLogon","true");
                    //在Session对象中保存用户名。
                    session.setAttribute("user",name);
                   
                    //从请求对象中取出用户先前访问页面的URI。
                    String origin_uri=httpReq.getParameter("origin_uri");
                    //如果origin_uri不为空,则将客户端重定向到用户先前访问的页面,
                    //否则将客户端重定向到首页。
                    if(null!=origin_uri && !"".equals(origin_uri))
                    {
                        httpResp.sendRedirect(origin_uri);
                    }
                    else
                    {
                        httpResp.sendRedirect(ctxPath+home_page);
                    }
                    return;
                }
                else
                {
                    //如果验证失败,则从请求对象中获取用户先前访问页面的URI。
                    //如果该URI存在,则再次将它作为origin_uri属性的值保存
                    //到请求对象中。
                    String origin_uri=httpReq.getParameter("origin_uri");
                    if(null!=origin_uri && !"".equals(origin_uri))
                    {
                        httpReq.setAttribute("origin_uri",origin_uri);
                    }
                    httpResp.setContentType("text/html;charset=GB2312");
                    PrintWriter out=httpResp.getWriter();
                    out.println("<h2>用户名或密码错误,请重新输入。</h2>");
                    RequestDispatcher rd=httpReq.getRequestDispatcher(logon_page);
                    rd.include(httpReq,httpResp);
                    return;
                }
            }
            else
            {
                //如果用户不是提交登录信息,则调用chain.doFilter()方法,
                //调用登录页面。
                chain.doFilter(request, response);
                return;
            }
        }
        else
        {  
            //如果访问的不是登录页面,则判断用户是否已经登录。
            String isLogon=(String)session.getAttribute("isLogon");
            if("true".equals(isLogon))
            {
               chain.doFilter(request, response);
               return;
            }
            else
            {
                //如果用户没有登录,则将用户的请求URI作为origin_uri属性的值
                //保存到请求对象中。
                String strQuery=httpReq.getQueryString();
                if(null!=strQuery)
                {
                    request_uri=request_uri+"?"+strQuery;
                }
                httpReq.setAttribute("origin_uri",request_uri);
               
                //将用户请求转发给登录页面。
                RequestDispatcher rd=httpReq.getRequestDispatcher(logon_page);
                rd.forward(httpReq,httpResp);
                return;
            }
        }
    }
   
    public void destroy(){}
}  
分享到:
评论

相关推荐

    石英砂过滤器使用手册范本.pdf

    石英砂过滤器使用手册范本.pdf

    hibernate过滤器使用例子

    在实际应用中,为了提高用户体验和系统性能,通常会结合分页技术使用过滤器。分页可以通过设置查询的`setFirstResult`和`setMaxResults`方法来实现,示例如下: ```java if (page != null) { query.setFirstResult...

    过滤器应用案例

    本案例“过滤器应用案例”着重讲解了如何利用过滤器来实现用户登录状态的监控以及权限控制。 过滤器在JAVA2EE中的作用: 1. **数据转换**:过滤器可以对请求或响应的数据进行转换,如编码转换,字符集调整等。 2. *...

    过滤器文档过滤器使用中的方法过滤器.pdf

    过滤器在IT行业中,特别是在Web开发领域,是一个重要的概念,它...通过合理地使用过滤器,开发者可以更高效地管理和控制Web应用的流量,提高应用的安全性和用户体验。理解并熟练运用过滤器是每个Web开发者的必备技能。

    完整IP端口过滤器使用下载

    "完整IP端口过滤器使用下载"这个标题暗示我们将会讨论一个工具或程序,它能够帮助用户筛选并管理IP地址及其对应的开放端口。这种过滤器在网络安全、服务器管理、网络监控以及数据包分析等场景下具有广泛的应用。 ...

    过滤器使用更换周期资料.pdf

    6. 环境因素对更换周期的影响:工业环境、使用设备的类型、空气质量、湿度、温度等都会影响过滤器的效率和使用寿命,因此在不同的应用场合,过滤器的更换周期也会有所不同。 7. 维护和监测:为了确保过滤器在适当的...

    java Web项目中过滤器使用方法

    本文将详细讲解Java Web项目中过滤器的使用方法,以及如何配置和实现过滤器。 1. **过滤器的概念** 过滤器是Servlet规范的一部分,它在请求被Servlet处理之前或之后执行,可以用来实现如登录检查、字符编码转换、...

    JAVAEE过滤器的使用

    一个过滤器可以被应用于多个URL模式,也可以有多个过滤器应用于同一个URL模式,这取决于`web.xml`或注解的配置。 7. **Filter的异常处理** 在`doFilter()`方法中,如果抛出未捕获的异常,容器会自动调用`destroy...

    wpe高级过滤器的使用

    wpe高级过滤器的使用

    过滤器的使用过滤器的使用

    本篇文章将深入探讨Java中的过滤器使用技术,旨在帮助开发者理解和掌握这一核心技术。 首先,我们需要了解过滤器的概念。在Java Servlet规范中,过滤器是一个实现了javax.servlet.Filter接口的类,它可以对HTTP请求...

    java过滤器的使用

    Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。过滤器允许我们在请求被发送到目标...通过熟练掌握过滤器的使用,我们可以提高Java Web应用的健壮性和用户体验。

    过滤器使用

    最后,通过`&lt;filter-mapping&gt;`标签将这个过滤器应用到所有请求,使用通配符`/*`表示。 ```xml &lt;filter-name&gt;SetCharacterEncoding &lt;filter-class&gt;myFilter.ChangeCharsetFilter &lt;param-name&gt;encoding ...

    java-web -- servlet 拦截器 过滤器使用

    2. **过滤器的使用**:实现Filter接口,覆写doFilter方法,设置过滤规则。在web.xml中配置Filter,指定需要拦截的URL模式,以及Filter的顺序。也可以使用Java配置方式。 3. **拦截器的使用**:在Spring MVC中,创建...

    servlet过滤器技术实例,

    例如,以下配置会将名为`MyFilter`的过滤器应用到所有以`.jsp`结尾的URL上: ```xml &lt;filter-name&gt;MyFilter &lt;filter-class&gt;com.example.MyFilter&lt;/filter-class&gt; &lt;filter-name&gt;MyFilter *.jsp ``` 四、...

    压缩空气精密过滤器使用说明书.doc

    **压缩空气精密过滤器使用详解** 压缩空气精密过滤器是一种重要的工业设备,主要应用于清除压缩空气中的固体微粒、水滴以及油雾等杂质,确保空气的洁净度。本使用说明书详细介绍了过滤器的结构、功能、性能以及安装...

    Cuckoo过滤器:实际上比 Bloom 更好_Go语言_代码_相关文件_下载

    Cuckoo 过滤器是近似集合成员查询的...Cuckoo 哈希表可以非常紧凑,因此对于需要低误报率 () 的应用程序,cuckoo 过滤器可以比传统的 Bloom 过滤器使用更少的空间。 更多详情、使用方法,请下载后阅读README.md文件

    Java中过滤器的使用

    `&lt;filter-name&gt;`定义过滤器的唯一标识,`&lt;filter-class&gt;`指定实现Filter接口的类全名,`&lt;filter-mapping&gt;`则指定过滤器应用于哪些Servlet或URL模式。 3. **过滤器链**:多个过滤器可以串联形成过滤器链,按照配置的...

    过滤器使用说明书.doc

    【过滤器使用说明书】 本文将详细讲解微孔过滤器ZG-10.0的使用、特点、滤芯选择及设备的维护等关键知识点,帮助用户更好地理解和操作该设备。 一、产品介绍 微孔过滤器ZG-10.0主要用于食品、乳品、饮料、酒类、...

    过滤器笔记整理

    #### 五、过滤器应用场景 - **编码过滤**:用于解决客户端提交的数据编码问题,确保字符集的一致性。 - **权限过滤**:检查用户是否已登录,以及是否有权限访问特定资源。 - **日志记录**:记录用户的访问日志,...

    过滤器图形符号(标准图形)

    - 对于带有特殊功能的过滤器(如磁性过滤器),还需注意其特定的应用条件和限制。 综上所述,《过滤器图形符号(标准图形)》提供了一系列标准化的过滤器图形符号,这些符号对于提升设计图纸的专业性和可读性具有...

Global site tag (gtag.js) - Google Analytics