网站过滤器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的更多相关文章
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- 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 ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
- AngularJS的过滤器$filter
过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...
随机推荐
- PhpStorm创建Drupal模块项目开发教程(3)
rush是 Drupal的脚本界面,PhpStorm的命令行工具支持Drush 5.8和更高版本. 接下来就Drush配置和基本操作进行设置,首先点击打开Settings | Command Line ...
- CSS、HTML5、JS
[att*=value]{}包含value属性的所有元素样式.[id*=div]{} a[href$=jpg]:after{} [att^=value]{}开头字符包含value属性的所有元素样式 [ ...
- nextAll([expr])
描述: 给第一个div之后的所有元素加个类 HTML 代码: <div></div><div></div><div></div> ...
- iOS开发随笔
突然看到一个搞11年IT的前辈 他的简历给人焕然一新的感觉 IOS:深入理解object-c语言 内存管理(ARC,MRC, 写回传),GCD,RunLoop,RunTime,,Block,Deleg ...
- html table表头斜线
关于htnl的table的表头斜线,符合表格设计规范,<style> .biaotou { line-height: 5px; text-align: left; } .biaotou { ...
- Android的学习第六章(布局一TableLayout)
今天我们来简单的说一下Android不居中的TableLayout布局(表格布局) 表格布局的意思就是将我们的布局看做为一个表格,主要用于对控件进行整齐排列 我们看一个简单的案例 <TableL ...
- css+div解决文字溢出控制显示字数
一.一般的文字截断(适用于内联与块): Example Source Code [www.mb5u.com] .text-overflow {display:block;/*内联对象需加*/widt ...
- IoC、DI、AOP
相信学习Java语言的同学都对这三个概念不太陌生.下面用spring的例子简单说明这三个概念. IoC(Inversion of Control):控制反转.正常情况(控制未反转)下,如果servic ...
- Xcode 8 Swift 类似插件方法
Xcode8 Swift使用技巧 1 option + cmd + / 可以弹出注释 2 color 然后加 enter 可以弹出颜色选择 3 #FIXME: 警告 4 #MARK: 备注 ...
- String 字符串递归截取字节字符串
public static String idgui(String s,int num)throws Exception{ int changdu = s.getBytes("UTF-8&q ...