Filter过滤器

今天学习了一点java 的Filter过滤器,实现了非法用户访问问题。

写一点心得吧。

Filter是一个过滤器,所谓过滤器嘛,就是我们熟知的筛子,将我们要的东西留下来,然后对筛到的东西进行一下操作,然后在放走。filter就是类似一个功能。

Filter的作用是用于过滤、拦截请求或响应消息,可以在Servlet或JSP页面运行之前和之后被自动调用。

废话不多说,还是用代码说话:

package com.shopping.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class UserCheckFilter implements Filter {
	private FilterConfig filterConfig;
	//登录页面,当用户没有登录是,将会首先转到这个页面
	private String loginPage = "adminLogin.jsp";
	

    public UserCheckFilter() {
        // TODO Auto-generated constructor stub
    }

	
	public void destroy() {
		// TODO Auto-generated method stub
		filterConfig = null;
	}

	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		//获得请求页面
		String uri = req.getRequestURI();
		
		//通过判断session中是否具有adminuser菜蔬来判断用户是否已经登录
		HttpSession session = req.getSession(true);
		//如果访问登录页面或已经登录
		if(uri.endsWith(loginPage) || uri.endsWith("adminLoginServlet") || session.getAttribute("adminuser") !=null){
			chain.doFilter(req, res);
			return;
					
		}
		//尚未登录,得发访问
		else{
			//跳转到登录页面
			res.sendRedirect(loginPage);
			
		}

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}


	public void init(FilterConfig fConfig) throws ServletException {
		//通过FilterConfig获得web.xml中设置的舒适化参数
		filterConfig = fConfig;
		if(filterConfig.getInitParameter("loginPage") != null){
			loginPage = filterConfig.getInitParameter("loginPage");
		}
		
	}

}


web.xml中是这样的:

<filter>
    <display-name>UserCheckFilter</display-name>
    <filter-name>UserCheckFilter</filter-name>
    <filter-class>com.shopping.filter.UserCheckFilter</filter-class>
 	<init-param>
 	    <param-name>loginPage</param-name>
 	    <param-value>adminLogin.jsp</param-value>
 	</init-param>
  </filter>
  <filter-mapping>
    <filter-name>UserCheckFilter</filter-name>
    <url-pattern>/UserCheckFilter</url-pattern>
  </filter-mapping>




web.xml文件是对Filter的注册;

来看一下源码:


destroy方法、doFilter方法、init方法三个必备的方法,方法不多说,见文知意。

来看init方法的参数FilterConfig fConfig,FilterConfig是可以从web.xml文件中读出Filter配置时定义的一些参数变量<init-param></init-param>中的

 

再看看HttpServletRequest和HttpServletResponse,其实HttpServletRequest和HttpServletResponse其实是实现了ServletRequest和ServletResponse接口的。只不过他其中多了一些关于http的定义。

然后在看看url和uri吧,这个东西挺让人纠结的,到底什么是uri啊,好像只听说过url。

其实url是uri的一种标识方法,uri(Uniform Resource Identifier通用资源标识符,url是uri的一种。


一般情况下,url使用的是绝对地址,uri就可以是相对的,也可以是绝对的。

     有一点大家一定有注意,当我们在项目中创建了过滤器或监听器,但是我们不想用了,就把它的.java文件删除掉了,如果是这样的话,那么当我们重新加载项目的时候就会报错,这是因为在我们加载项目的时候,服务器会自动的加载web.xml文件中配置,而且是顺序加载,所以当遇到我们配置了但是已经无源文件,那么当然会报错。

解决办法,当我们删除一个监听或者是一个过滤器时,一定要将web.xml文件的配置和.java文件一起删除掉。

个人心得,如有错误请留言,大家一起交流学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值