java过滤器排除,Java过滤器的使用和拦截排除的实现

Java过滤器的使用和拦截排除的实现

本文将对如下几个内容作出讲解与说明:

web.xml的简单介绍

filter的工作原理

filter的实现

拦截排除的实现和说明

web.xml简单介绍

在Java开发中,我们每天都有跟拦截器打交道,但是很多人对filter到底是个什么东西可能并没有做深入的了解,包括对web.xml中的servlet、servlet-Mapping、filter、filter-mapping都很陌生,那么现在我们可以简单的交流一下。

servlet

A

com.test.TestServlet

A

/a.do

servlet上表达的意思就是声明一个名字A的servlet,对应的实现类com.test.TestServlet。servlet-mapping表达的意思是,当一个请求后缀为a.do的http请求发送过来以后,该请求会调用名字为A的servlet,换句话说就是执行TestServlet来处理该请求。

filter

有了上面servlet的理解,我们理解filter就更加方便。请看如下简单配置。

SessionFilter

com.demo.test.util.SessionFilter

excludedPages

/index.jsp

SessionFilter

/index.jsp

上面的filter表达的意思是声明一个名字叫做SessionFilter的过滤器,该过滤器的具体实现对应com.demo.test.util.SessionFilter。该过滤器给定初始化参数(名称:excludedPages,参数:excludedPages),类似httpServletRequest对象中的声明的请求参数。filter-mapping表示当系统中发起有访问index.jsp的http请求的时候则调用该拦截器,也就是执行com.demo.test.util.SessionFilter。如果想要深入的了解filter工作原理,可以自己搜索资料,资料也很多。

filter具体class实现

public class SessionFilter implements Filter {

private String excludedPages;

private String[] excludedPageArray;

/** *@see Filter#destroy() */

public void destroy() {

return;

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

boolean isExcludedPage = false;

for (String page : excludedPageArray) {

if (((HttpServletRequest) request).getServletPath().equals(page)) {

isExcludedPage = true;

break;

}

}

if (isExcludedPage) {

chain.doFilter(request, response);

} else {//

HttpSession session = ((HttpServletRequest) request).getSession();

if (session == null || session.getAttribute("") == null) {

((HttpServletResponse) response).sendRedirect("/login.htm");

} else {

chain.doFilter(request, response);

}

}

}

public void init(FilterConfig fConfig) throws ServletException {

excludedPages = fConfig.getInitParameter("excludedPages");

if (null != excludedPages && excludedPages.length() > 0) {

excludedPageArray = excludedPages.split(",");

}

return;

}

}

当执行该拦截器会先执行init方法,我们在init方法中可以获取到在web.xml中配置给filter的初始化参数。在执行init方法执行,则执行dofilter方法,在该方法中我们实现过滤器的拦截作用,并实现拦截排除。

拦截器工作原理 如何实现拦截:

当一个http请求到达之后,并符合web.xml中的filter-mapping的映射规则,则触发执行filter,如果不做拦截,则调用chain.doFilter(request, response)让系统继续执行,如需要做拦截,则跳转到制定的页面,例上面的demo,则跳转到login.html页面。

排除拦截实现 如何对某个请求不做拦截:

当一个请求到达之后,我们在init中获取了web.xml中给filter配置的初始化参数,获取到该初始化数据就是我们不做拦截的请求的规则,本例子中是使用index.jsp作为拦截排除请求。也是使用index.jsp作为过滤器触发映射条件。也就是当系统中有http请求以index.jsp结尾,则该请求触发执行SessionFilter,在SessionFilter中我们获取到排除拦截的参数是index.jsp。在if (((HttpServletRequest) request).getServletPath().equals(page)) {代码中 就是处理当前的请求是否是请求index.jsp,如果是我们则不作拦截,如果不是我们则跳转到login.html页面。这样通过给filter制定初始化参数,并且在filter中将当前的request与初始化参数对比,来判断是否拦截本次请求的要求就达到了。 如果在阅读中遇到问题可以自己搜索资料了解web.xml在Javaweb项目中的作用于详细讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值