网站过滤器Filter

实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求。网站有了过滤器十分的方便,可以通过过滤器来过滤这个用户是否已经登陆,如果没有登陆,那么将限制TA的访问权限,而且过滤器的设置以及配置都比较简单。下面通过一个登陆过滤器的代码简单说一下过滤器的使用:

/**
 *登陆过滤器
 */  

public class LoginFilter implements Filter {  

    @Override
    public void destroy() {  

    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hsq = (HttpServletRequest)req;
        //取得SESSION中的loginUser对象
        User user = (User)hsq.getSession().getAttribute("loginUser");
        if(user==null || "".equals(user)){
            //如果用户没有登录,那么将会直接跳转到登陆页面
            ((HttpServletResponse)resp).getWriter().write("<script>window.parent.location.href=‘/index.jsp‘</script>");
//          ((HttpServletResponse)resp).sendRedirect("/index.jsp");  

        }else{
            chain.doFilter(req, resp);
        }
    }
    @Override
    public void init(FilterConfig arg0) throws ServletException {  

    }  

}

  上面的这个过滤器就会过滤掉所有未登陆的用户,让TA们跳转到登陆页面去登陆。如果要这个登陆过滤器起作用,还需要在web.xml文件中进行配置:

<!-- 配置过滤器 -->
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.common.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/user/*</url-pattern>
  </filter-mapping>  

此处表示这个任何用户访问/user/*下面的路径将会通过此过滤器,如果没有登陆,SESSION中没有user,那么将会跳转到登陆页面。如果需要对多个地址进行配置(在SSM框架中,需要对每个控制器进行配置),那么正确的配置方法是(N个一样的):

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.common.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/user/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/abc/*</url-pattern>
  </filter-mapping> 

不知道大家有没有注意到上面过滤器的这行被注释的代码,正常情况下使用此代码就可以完成跳转任务:

((HttpServletResponse)resp).sendRedirect("/index.jsp");

而下面这行代码是:

((HttpServletResponse)resp).getWriter().write("<script>window.parent.location.href=‘/index.jsp‘</script>");

最下面这行代码就是为了解决我这次遇到的小问题的。因为需要调整的页面是frameset框架的,所以有很多链接定义为跳转到框架下的某个地方,这样如果使用上面的那种跳转,将会是局部跳转,达不到应有的效果,只有使用下面的方式返回一句js代码,然后执行,整体跳转,这样才能满足效果。

时间: 2024-10-11 15:48:32

网站过滤器Filter的相关文章

JavaWeb-19 (JDBC之过滤器Filter)

JavaWeb-19 JDBC之过滤器Filter 一.Filter过滤器概述 Filter(过滤器):Web三大组件之一,就是对目标资源进行请求前或请求后. Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 实际中:过滤器就相

【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递

post传递的编码问题,解决的方式有两种,一种是修改Tomcat的配置文件,这种方式是我反对的,因为你并不能保证自己的工程在任意一个Tomcat都能跑,当然如果以后出现什么情况,处理修改Tomcat配置文件,没有别的的话,那么才修改也不迟,另一种是在页面取值之前使用: request.setCharacterEncoding("utf-8"); 本来这样没什么的,不就一行代码吗?但是在现在JSP编程不停强调页面绝对不能出现后端代码的趋势下,不能使用<[Jsp]使用Post与Get

过滤器Filter详解

Filter称之为过滤器: WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能. 例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Filter简介: Servlet API中提供了一个Filter接口,开发web应用时, 如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter. 通过Filter技术,开发人员可以实现用户

【JavaWeb学习】过滤器Filter

一.简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技

过滤器Filter

什么是过滤器 过滤器Filter其实就是Servlet,只不过它的职责是在过滤信息,在请求进入核心servlet时候的过滤,在响应发送给客户端时候的过滤. 使用过滤器 要想创建自己的Filter,只需要实现Filter接口,重写里面的init方法.doFilter方法.destroy方法.init方法在你进行过滤的时候的初始化方法,doFilter方法就是你的核心过滤方法,里面有两个参数,一个是ServletRequest,另外一个是ServletResponse,前面一个代表的是请求,后面一个

JSP内置对象的作用域,及过滤器filter

pageContext:只要跳转页面,就不存在. request, 只要在当前页面就存在 session, 只有浏览器关闭,才不存在. application,只有服务器关闭后,才不存在. 如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里. 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量. 如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期. 所谓请求周期,就是指从htt

javaweb-Servlet过滤器Filter

一.在javaweb学习中javaweb过滤器是一个非常重要的学习内容在web开发阶段的中Javaweb过滤器可以很好的优化代码,同时减少许多不必要的代码,将代码很好的集合在一起,这样的操作可以减少许多不必要的代码,同时大大的减少程序的运行. 二.正对于javaweb的过滤器Filter可以从以下几个方面进行讲解 1.Javaweb的概念 javaweb是一个服务器组键,他可以截取用户端的请求以及响应的信息,并且对信息进行过滤. 2.过滤器的api  Servlet过滤器API包含了3个接口,它

AngularJS 过滤器(filter)

过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们是:currency(货币).date(日期).filter(子串匹配).json(格式化json对象).limitTo(限制个数).lowercase(小写).uppercase(大写).number(数字).orderBy(排序).总共九种.除此之外还可以自定义过滤器,这个就强大了,可以满足任何

jQuery -&gt; 获取元素的各种过滤器(filter)

通过顺序来选择 顺序选择的过滤器(filter)有 :first 第一个元素 :last 最后一个元素 :even 序号为偶数的元素 :odd 序号为奇数的元素 :eq(n) 序号等于n的元素 :lt(n) 序号小于n的元素 :gt(n) 序号大于n的元素 如果有如下的表格 0 even 1 odd 2 even 3 odd 4 even html代码如下 <table> <tr><td>0</td><td>even</td><