配置Filter

来源:互联网 发布:淘宝上最好吃的麻薯 编辑:程序博客网 时间:2024/06/05 19:27

     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
原创粉丝点击