web.xml文件中filter配置详解

从J2EE1.3开始,Servlet2.3规范中加入了对过滤器的支持,过滤器能够对目标资源的请求和相应进行截取。过滤器的工作方式分为4种:request过滤器,include过滤器,forward过滤器,error过滤器。

过滤器的工作分为等我弄懂了再说。我们先说说Java如何处理filter请求

public class AuthorityFilter implements Filter 
{
//FilterConfig可用于访问Filter的配置信息
private FilterConfig config;
//实现初始化方法
public void init(FilterConfig config)
{
this.config = config; 
}
//实现销毁方法
public void destroy()
{
this.config = null; 
}
//执行过滤的核心方法
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException,ServletException
{
//获取该Filter的配置参数
String encoding = config.getInitParameter("encoding");
String loginPage = config.getInitParameter("loginPage");
String proLogin = config.getInitParameter("proLogin");
//设置request编码用的字符集
request.setCharacterEncoding(encoding);                    //①
HttpServletRequest requ = (HttpServletRequest)request;
HttpSession session = requ.getSession(true);
//获取客户请求的页面
String requestPath = requ.getServletPath();
//如果session范围的user为null,即表明没有登录
//且用户请求的既不是登录页面,也不是处理登录的页面
if( session.getAttribute("user") == null
&& !requestPath.endsWith(loginPage)
&& !requestPath.endsWith(proLogin))
{
//forward到登录页面
request.setAttribute("tip" , "您还没有登录");
request.getRequestDispatcher(loginPage)
.forward(request, response);
}
//“放行”请求
else
{
chain.doFilter(request, response);
}
}
}

上面Filter的doFilter方法里前三行代码用于获取Filter的配置参数。①号代码按配置参数设置了request编码所用的字符集。接下来判断session范围内是否有user属性,没有该属性即认为没有登录,如果既没有登录,而且请求地址也不是登录页面和处理登录页面,那么系统直接跳转到登录页面。

该Filter在web.xml中的配置片段如下:

<!-- 定义Filter -->
<filter>
<!-- Filter的名字 -->
<filter-name>authority</filter-name>
<!-- Filter的实现类 -->
<filter-class>lee.AuthorityFilter</filter-class>
<!-- 下面3个init-param元素配置了3个参数 -->
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>loginPage</param-name>
<param-value>/login.jsp</param-value>
</init-param>
<init-param>
<param-name>proLogin</param-name>
<param-value>/proLogin.jsp</param-value>
</init-param>
</filter>
<!-- 定义Filter拦截的URL地址 -->
<filter-mapping>
<!-- Filter的名字 -->
<filter-name>authority</filter-name>
<!-- Filter负责拦截的URL -->
<url-pattern>/*</url-pattern>
</filter-mapping>
上面的配置片段为Filter指定了3个配置参数,指定loginPage为/login.jsp,proLogin为/proLogin.jsp。这表明,如果没有登录该应用,普通用户只能访问login.jsp和proLogin.jsp页面,只有当用户登录之后才可以自由访问其他页面。

在web.xml中配置Filter,只用init-param元素为该Filter配置参数,init-param可接收如下两个子元素:

param-name:指定参数名

param-value:指定参数值

另外,filter-class中指定的过滤器类需继承javax.servlet.Filter,并且必须有以下三种方法:

init(FilterConfig filterConfig):初始化,一般情况下读取配置文件中的init-param参数值,如filterConfig.getInitParameter("encoding")

doFilter(...):用于对request,response进行处理,并通过chain.doFilter(...)交给下一个控制器

destroy():资源销毁



  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值