[Spring MVC] SpringMvc interceptor and filter study notes

SpringMvc

Interceptors and filters

一、自定义拦截器
1.编写MyIntercepetor类继承HandlerInterceptor类
package com.kuang.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyIntercepetor implements HandlerInterceptor {
    
    

    //return true就相当于过滤器中的放行filterChain.doFilter(request, response);
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        System.out.println("=====================处理前========================");
        return true;
    }
    //一般只用preHandle,后两个方法用于日志输出
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    
        System.out.println("=====================处理后========================");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    
        System.out.println("=====================清理========================");
    }
}
2.编写一个拦截用户登录的拦截器
package com.kuang.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    
    

   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
    
    
       // 如果是登陆页面则放行
       if (request.getRequestURI().contains("login")) {
    
    
           return true;
      }
       // 如果用户已登陆也放行
       if(request.getSession().getAttribute("username") != null) {
    
    
           return true;
      }
       // 用户没有登陆跳转到登陆页面
       request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
       return false;
  }
}
3.配置拦截器
<!--拦截器配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--拦截所有请求-->
        <mvc:mapping path="/**"/>
        <bean class="com.kuang.config.MyIntercepetor"></bean>
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.kuang.config.LoginInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>
二、自定义过滤器(解决编码问题)
1.编写EncodingFilte类继承Filter类
package com.kuang.config;

import javax.servlet.*;
import java.io.IOException;

public class EncodingFilter implements Filter {
    
    
    public void init(FilterConfig filterConfig) throws ServletException {
    
    

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    public void destroy() {
    
    

    }
}
2.配置过滤器
<!--自定义过滤器-->
<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.kuang.config.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>'/*'</url-pattern>
</filter-mapping>
3.使用SpringMvc提供的过滤器直接解决乱码问题
<filter>
   <filter-name>encoding</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
       <param-name>encoding</param-name>
       <param-value>utf-8</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>encoding</filter-name>
   <url-pattern>'/*'</url-pattern>
</filter-mapping>
三、拦截器与过滤器的注意点
1.过滤器
过滤器是所有javaweb项目都可以用的
在配置文件web.xml中配置过滤器
在url-pattern中配置了'/*'之后,可以对所有要访问的资源进行拦截(包括静态资源)
2.拦截器
拦截器是所有SpringMvc项目可以用的
在配置文件springmvc-servlet.xml中配置拦截器
拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的
3.过滤器与拦截器的区别
拦截器是AOP思想的具体应用

Integrated SSM framework

Guess you like

Origin blog.csdn.net/kieson_uabc/article/details/107689746