配置Filter

     1.  配置Filter与配置servlet非常相似,需要配置如下两个部分:

(1)配置Filter名

(2)配置Filter拦截的URL模式

       区别在于:servlet通常只配置一个URL,而Filter可以同时拦截多个请求的URL。因此在配置FilterURL的模式时通常会使用模式字符串,使得Filter可以拦截多个请求。

       2.配置Filter同样有两种方式:

(1)在Filter类中通过@WebFilter注解进行配置

(2)在web.xml文件中进行配置。

       3.使用web.xml 文件进行配置,代码如下:

<!-- 定义Filter -->
	<filter>
		<!-- Filter的名字,相当于指定@WebFilter
			的filterName属性 -->
		<filter-name>log</filter-name>
		<!-- Filter的实现类 -->
		<filter-class>lee.LogFilter</filter-class> 
	</filter>
	<!-- 定义Filter拦截的URL地址 -->
	<filter-mapping>
		<!-- Filter的名字 -->
		<filter-name>log</filter-name>
		<!-- Filter负责拦截的URL,相当于指定@WebFilter
			的urlPatterns属性 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
       4.使用@WebFilter注解进行配置

(1)@WebFilter支持的常用属性如下:

配置代码如下:

@WebFilter(filterName="log"
	,urlPatterns={"/*"})
public class LogFilter implements Filter
{
      5.Filter常用的作用是:对用户请求进行过滤,判断用户是否登录。

下面代码是验证是否登录的一个简单例子:

@WebFilter(filterName="authority"
	, urlPatterns={"/*"}
	, initParams={
		@WebInitParam(name="encoding", value="GBK"),
		@WebInitParam(name="loginPage", value="/login.jsp"),
		@WebInitParam(name="proLogin", value="/proLogin.jsp")})
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);
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值