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

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

最新文章

  1. iOS系统验证关闭
  2. Nodejs之MEAN栈开发(一)---- 路由与控制器
  3. 站长必备:10个好用的 WordPress 备份插件
  4. SQL 按特定字段值排序
  5. LYDSY模拟赛day3 平均数
  6. vector在C++中的基本用法
  7. hdu 5306 优先队列
  8. 利用pl/sql developer进行远程连接oracle server出现的问题及解决办法
  9. IOS 用正则表达式解析HTML等文件,得到所有文本
  10. activity状态的保存和保持(onRetainNonConfigurationInstance和getLastNonConfigurationInstanc
  11. 手写PE文件(一)
  12. echarts的使用
  13. HibernateProxy异常处理 java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
  14. JavaScript基础(二)
  15. 每天一个linux命令(54)--watch命令
  16. tensorflow l2_normalize函数
  17. 文件上传,服务端压缩文件方法,重点是png与gif图片的压缩,保证了透明度与动画
  18. PS 图像调整算法——色调分离
  19. SpringBoot开源项目(企业信息化基础平台)
  20. Hystrix快速入门

热门文章

  1. vs2013打包
  2. 构造From窗体获取数据库数据,去除数据库中无用信息,并赋值给字段,最后画出图
  3. 梦想CAD控件COM接口光栅图处理
  4. 禁止foreach循环使用remove/add----快速失败
  5. JAVA基础——IO流字节流
  6. TWaver3D特效系列之环境映射
  7. angular4打包以后,刷新报404
  8. css--小白入门篇3
  9. apacheAB测试指标
  10. Linux之sed:删除某行以及替换