站点过滤器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代码,然后运行,总体跳转,这样才干满足效果。
站点过滤器Filter的更多相关文章
- Swift 4.0 数组(Array)之过滤器(filter)的使用
我们先来定义一个常量整型数组 let array = [5, 4, 3, 1, 2] 过滤器(filter)使用之筛选出大于3的值 let resultArray = array.filter { ( ...
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- 网站过滤器Filter
实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...
- paip.输出内容替换在Apache 过滤器filter的设置
paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- [ionic开源项目教程] - 第6讲 过滤器filter的使用
过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...
- selvert的过滤器filter处理中文乱码
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- MVC之 自定义过滤器(Filter)
MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...
- Servlet中的过滤器Filter用法
1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...
随机推荐
- struts2之actionSupport学习
actionSupport在手工完成字段验证,显示错误消息,国际化等情况下推荐使用.
- Angular——依赖注入
基本介绍 1.AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 2.所谓依赖注入是指在运行时自动查找依赖关 ...
- HDU_3591_(多重背包+完全背包)
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 安卓app测试之流量监控
一.查看PID 通过ps命令查看:ps | grep packageName 案例:adb shell "ps | grep tv.danmaku.bili" adb shell ...
- Flask框架 之abort、自定义错误、视图函数返回值与jsonify
一.abort函数 使用abort函数可以立即终止视图函数的执行,并可以返回给前端特定的值. abort函数的作用: 1.传递状态码,必须是标准的http状态码 2.传递响应体信息 @app.rout ...
- Windows下编译64位GSL
GSL (GNU Scientific Library, http://www.gnu.org/software/gsl/)官方并没有提供编译好的Windows版本.首先要保证Windows是64位的 ...
- java虚拟机(四)--内存溢出、内存泄漏、SOF
学习了java运行时数据区,知道每个内存区域保存什么数据,可以参考:https://www.cnblogs.com/huigelaile/p/diamondshine.html,然后了 解内存溢出和内 ...
- ThinkPHP---TP功能类之上传
[一]概论 (1)上传操作的核心操作:移动临时文件(move_upload_file),在ThinkPHP里封装了上传类Upload.class.php (2)上传类Upload.class.php代 ...
- 06二叉树、Map、Collections、适配器
06二叉树.Map.Collections.适配器-2018/07/16 1.set集合,无索引,不可以重复,无序(存取不一致) 2.TreeSet用来对象元素进行排序,可以保证元素唯一 储存自定义对 ...
- 队列的头函数使用C++
queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的 ...