SpringMVC拦截器与JavaEE过滤器的使用及区别

拦截器

在我们的程序中,请求网页时,我们都会判断该用户是否登陆,若未登陆,重定向到登陆页面。如果我们每一次请求都判断一下是否登陆,显然是不现实的。
SpringMVC提供了拦截器,也就是每一次请求都会拦截并作出相应判断。若判断成功放行,否则阻止或者重定向到相应页面!我们拿登陆为例演示:

  1. 写一个拦截器类,实现HandlerInterceptor接口,并重写他的三个方法
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    //请求之前调用的方法
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        //从session中获取用户名
        String userName = (String) session.getAttribute("userName");
        //判断是否存在用户名,如果不存在代表未登录
        if(StringUtils.isEmpty(userName)){
            //重定向到登陆请求
            response.sendRedirect(request.getContextPath()+"/login.form");
            //阻止继续运行
            return false;
        }
        //用户名存在,代表已登陆,放行,继续运行
        return true;
    }

    @Override
    //请求之后调用的方法
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    //请求完成调用的方法
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
  1. 在Spring的配置文件中配置拦截路径
    关于springmvc的配置文件的头内容,可参考官方文档 Springmvc官方
    <!--配置拦截器链-->
    <mvc:interceptors>
        <!--配置拦截器-->
        <mvc:interceptor>
            <!--拦截路径,可配置多个-->
            <mvc:mapping path="/a.form">
            <mvc:mapping path="/b.form">
            <!-- 也可设置全部拦截 -->
            <mvc:mapping path="/*.form">
            <!--不拦截路径,即白名单,可配置多个-->
            <mvc:exclude-mapping path="/c.form">
            <bean class="sml.interceptor.LoginInterceptor">
        </bean></mvc:exclude-mapping></mvc:mapping></mvc:mapping></mvc:mapping></mvc:interceptor>
    </mvc:interceptors>

过滤器

浏览器的默认代码为ISO8859。为了解决代码乱码的问题,统一编码格式,可以使用Java EE提供的过滤器。[en]The default code of the browser is ISO8859. To solve the problem of garbled code and unify the coding format, we can use the filter provided by JavaEE.
在web.xml中加入该配置,解决前端传后台中文数据乱码问题。如果webapp报红,说明webapp头配置的版本较低,自行百度更改

<filter>
        <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注:过滤器(Filter)是Java EE中的组件,则任何一个Java的WEB项目都可以使用过滤器;而拦截器(Interceptor)是SpringMVC中的组件,仅当使用了SpringMVC框架才可以使用这个拦截器,并且,仅当被SpringMVC框架处理的请求才有可能被拦截器进行处理,假如将 DispatcherServlet 的路径映射为 *.form ,则只有以 .form 作为后缀的请求才可能被拦截器处理,其它请求是不会被拦截器处理的!

这里我只举一个简单的例子来演示,还有很多其他的用途,比如打印日志,监控等等。[en]Here I just give a simple example to demonstrate, there are many other uses, such as printing logs, monitoring and so on.

Original: https://blog.csdn.net/weixin_45056780/article/details/104797810
Author: 世代农民
Title: SpringMVC拦截器与JavaEE过滤器的使用及区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6119/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总