站点过滤器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-13 02:09:18

站点过滤器Filter的相关文章

监听器listener&amp;过滤器filter

Servlet技术规范 描述三种技术 : Servlet(服务器小程序) .Filter(过滤器) .Listener(监听器) Filter运行在服务器端,对服务器端web资源的访问 进行拦截,起到过滤的作用 Servlet API中 定义接口 Filter,用户只需要编写程序实现Filter接口,完成过滤器编写 Filter快速入门1.编写类 实现 Filter接口2.在服务器端注册 Filter (配置拦截哪个web资源) ----- web.xml   <!-- 注册过滤器 --> 

【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><

深入分析JavaWeb Item36 -- 过滤器Filter高级应用

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 使用代理 在阎宏博士的<JAVA与模式>一书中

JavaWeb过滤器Filter

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