——过滤器使用已经非常久了,今天遇到了一个小问题。也就想顺便写一个关于过滤器的博文。记录一下自己使用的感受。

实际上,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. Swift 4.0 数组(Array)之过滤器(filter)的使用

    我们先来定义一个常量整型数组 let array = [5, 4, 3, 1, 2] 过滤器(filter)使用之筛选出大于3的值 let resultArray = array.filter { ( ...

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

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

  3. 网站过滤器Filter

    实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...

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

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

  5. java Servlet中的过滤器Filter

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

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

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

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

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

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

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

  9. Servlet中的过滤器Filter用法

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

随机推荐

  1. C# 客户端读取共享目录文件

    控制台应用程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  2. 关于 . H 宏定义技巧

    #ifndef   LABEL #define   LABEL //代码部分 #endif LABEL为一个唯一的标号,命名规则跟变量的命名规则一样.常根据它所在的头文件名来命名,例如,如果头文件的文 ...

  3. Tcl之Math

    expr is for Tcl to do math operations. It takes all of its arguments ("2 + 2" for example) ...

  4. (转)全文检索技术学习(三)——Lucene支持中文分词

    http://blog.csdn.net/yerenyuan_pku/article/details/72591778 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程:  从一个Re ...

  5. POJ_1611_The Suspect

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 25149   Accepted: 12329 De ...

  6. Android Measure 体系简单总结

    Android对View的测量是半协商半强制半模糊半具体的. 测量过程中的两套尺寸体系:  [半强制] ParentView**约束ChildView: **MeasureSpec(通过measure ...

  7. LeetCode141LinkedListCycle和142LinkedListCycleII

    141题:判断链表是不是存在环! // 不能使用额外的存储空间 public boolean hasCycle(ListNode head) { // 如果存在环的 两个指针用不一样的速度 会相遇 L ...

  8. 洛谷——P2659 美丽的序列

    P2659 美丽的序列 单调栈维护区间最小值,单调递增栈维护区间最小值, 考虑当前数对答案的贡献,不断加入数,如果加入的数$>$栈顶,说明栈顶的元素对当前数所在区间是有贡献的,同时加入当前的数. ...

  9. 第十一节:Web爬虫之数据存储(数据更新、删除、查询)

    接着上一节的内容 5.MySQL数据更新 结果是将id=3的name进行更新操作,结果如下: 6.MySQL数据去重及更新 结果是判断数据是否有重复的,如果有重复的将不再存储,若没有重复的就更新数据进 ...

  10. list tuple dict (列表,元祖,字典间的相互转换)

    #-*- coding:UTF-8 -*- #author:RXS002 #1.字典 dict = {'name':'Zara','age':7,'class':'First'} #字典转换为字符串, ...