实际上,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代码,然后执行,整体跳转,这样才能满足效果。

网站过滤器Filter的更多相关文章

  1. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  2. paip.输出内容替换在Apache 过滤器filter的设置

    paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...

  3. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  4. [ionic开源项目教程] - 第6讲 过滤器filter的使用

    过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...

  5. selvert的过滤器filter处理中文乱码

    注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...

  6. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  7. Servlet中的过滤器Filter用法

    1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...

  8. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  9. AngularJS的过滤器$filter

    过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...

随机推荐

  1. 妈妈再也不担心我的编码问题了。中文编码融汇贯通,windows,django,python,java,html 【转】

    http://blog.csdn.net/farmer_cc/article/details/41830999 HTML编码:html文件是utf-8编码的,不确定的话用记事本打开,另存为的时候就能够 ...

  2. ffmpeg编译参数详解

    Usage: configure [options]用 法:configure [选项]Options: [defaults in brackets after descriptions]选   项: ...

  3. linux下TCP/IP及内核参数优化调优(转)

    Linux下TCP/IP及内核参数优化有多种方式,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等. 如下配置是写在sysctl.con ...

  4. ScrollView

    在程序设计中,有时我们需要实现自动滚屏或根据选择直接滚动到指定的位置的功能.这里用到的主要组件就是滚动视图(ScrollView). ---------- 那么使用ScrollView如何实现布局自动 ...

  5. angularJS中directive与controller之间的通信

    当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...

  6. MySQL 各种超时参数的含义

    MySQL 各种超时参数的含义 今日在查看锁超时的设置时,看到show variables like '%timeout%';语句输出结果中的十几种超时参数时突然想整理一下,不知道大家有没有想过,这么 ...

  7. 分页sql优化

    如果分页sql里包含排序: select * from (...order by id) where rownum <=20 因为要排序,所以即使是分页只取20条,执行计划还是要把所有满足条件的 ...

  8. OpenLayers2.13.1知识整理

    对于地图的默认加载等,网上很多资料,就不细说了,主要整理解决一些api不明显或不全的内容 因玩webgis只有一周左右,肯定很水~~ 我资料中的目录结构如下: html map js(自己封装的js目 ...

  9. 读《编写可维护的JavaScript》第二三章总结

    第二章 注释 添加注释的一般原则是,在需要让代码变得清晰时添加注释. 2.1 ① 单行注释 独占一行的注释,用来解释下一行代码.这行注释之前总是有一个空行,且缩进层级和下一行代码保持一致. 在代码行的 ...

  10. BW系统之间的InfoProvider数据传输:Export DataSource

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...