Filter过滤器
来源:互联网 发布:关于乔任梁网络暴力 编辑:程序博客网 时间:2024/05/21 06:37
今天学习了一点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 stubfilterConfig = 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 chainchain.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文件一起删除掉。
个人心得,如有错误请留言,大家一起交流学习。
- 过滤器Filter
- 过滤器Filter
- Filter 过滤器
- 过滤器 filter
- 过滤器filter
- 过滤器,Filter
- 过滤器Filter
- filter--过滤器
- 过滤器Filter
- filter过滤器
- Filter过滤器
- filter过滤器
- Filter过滤器
- Filter过滤器
- Filter 过滤器
- Filter过滤器
- Filter(过滤器)
- filter过滤器
- AS3.0 实现最小堆
- 找到该死的OutOfMemoryError
- Andengine中如何使用xml文件来布局
- 将网页保存成PDF的好方法
- ant如何使用——初学者一篇通
- Filter过滤器
- Ubuntu10.10 隐藏桌面挂载的磁盘图标
- mysql遇到登录出现的问题
- UITableView划动删除的实现
- v$datafile_header中FUZZY
- ACM训练集
- Ubuntu 12.04下安装极点五笔输入法
- 总结几道面试笔试题
- 程序员的年度计划