零基础入门SpringMVC拦截器的配置与使用

 更新时间:2022年04月27日 09:58:00   作者:羡羡ˇ  
Spring MVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。本文将代码演示和文字描述详解拦截器的原理与使用

 在SpringMVC中 我们说到了拦截器 , 它会在映射处理器(HandleMapping)执行时检查我们
访问的地址是否配置拦截器 , 在拦截器中实现一些功能

       SpringMVC 定义了拦截器接口 HandlerInterceptor该接口中定义了三个方法,这三个方法的调用时在 SpringMVC 框架内部完成的, 调用这个三个方法的时候,其参数的值也是从框架内部传递进来的。

首先我们来看第一个方法 : boolean preHandle()

      预处理方法,实现处理器(Controller层, 控制器)方法的预处理,就是在处理器方法执行之前这个方法会被行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三个参数为被拦截的处理器方法。如果 preHandle 方法返回 true 表示继续流程(如调用下一个拦截器或处理器方法),返回 false 表示流程中断,不会继续调用其他的拦截器或处理器方法,此时我们需要通过 response 来产生响应;

         意思就是说呢 , 当请求到达我们控制层方法时, 会先进入这个方法中, 根据preHandle() 方法的

返回结果(true 和 false) 来决定下一步如何执行

      后两个方法 : void postHandle()     afterCompletion()

      首先第一个方法是控制层方法执行后会执行, 第二个方法时整个请求结束后执行, 因为版本原因, 这两个方法的使用频率较低, 所以这里我们做一个了解即可

      接着我们去搭建一个拦截器看看到底是怎么一回事

//自己编写一个类PreInterceptor 实现 HandlerInterceptor接口 , 重写preHandle方法
public class PreInterceptor implements HandlerInterceptor {
    //此方法返回true ,请求才能顺利到达相应的处理方法中,否则会被拦截
    @Override
    public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler) throws Exception {
        //第三个参数为目标控制器对象
        HttpSession session= request.getSession();
        //判断信息是否有效
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin==null){
            response.getWriter().print(202);
            return false;
        }else {
            return true;
        }
    }
}

      接着需要去配置文件中配置拦截器

<!--配置拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--所有请求都进入拦截器-->
        <mvc:mapping path="/**"/>
        <!--指定哪些请求不进入拦截器-->
        <mvc:exclude-mapping path="/login/login"/>
        <mvc:exclude-mapping path="/css/**"/>
        <mvc:exclude-mapping path="/images/**"/>
        <mvc:exclude-mapping path="/js/**"/>
        <mvc:exclude-mapping path="/**.html"/>
        <!--拦截器实现类-->
        <bean id="login" class="com.ff.ssm.util.PreInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

这里我们以后端登录 的控制器为例

@RestController
@RequestMapping(value = "/login")
public class LoginController {
    @Autowired
    LoginService loginService;
    @PostMapping(value = "/login")
    public CommonResult adminLogin(Admin admin, HttpSession session){
        CommonResult commonResult;
        try {
            Admin admin1 = loginService.login(admin);
            if(admin1==null){
                commonResult=new CommonResult(201,"账号或密码错误",admin1);
            }else  {
                session.setAttribute("admin",admin1);
                commonResult=new CommonResult(200,"登录成功",admin1);
            }
        }catch (Exception e){
            commonResult=new CommonResult(500,"登录失败","");
        }
        return commonResult;
    }
}

         如上, 前端发起了登录请求 , 我们配置了拦截器, 会先进入拦截器 , 根据 preHandle() 方法决定

是否可以进入到我们具体的登录方法中 

      上述控制器例子是将用户的信息存入了session中 , 我们每次接受前端的请求时, 在拦截器中判断用户的信息是否还是有效的 , 有效则放行, 无效则拦截 , 所以前提是我们的登录请求肯定是不能被拦截的, 因为这时候没有登录, 用户信息为 null ,所以上面我们配置了不拦截登录请求, 也不去拦截那些请求页面

      以上就是SpringMVC中拦截器的具体功能和实现 , 感谢阅读

到此这篇关于零基础入门SpringMVC拦截器的配置与使用的文章就介绍到这了,更多相关SpringMVC拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java Swing布局管理之BoxLayout布局

    java Swing布局管理之BoxLayout布局

    这篇文章主要为大家详细介绍了java Swing布局管理之BoxLayout布局的相关资料,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Maven项目部署到Jboss出现Failed to create a new SAX parser

    Maven项目部署到Jboss出现Failed to create a new SAX parser

    这篇文章主要为大家详细介绍了Maven项目部署到Jboss出现Failed to create a new SAX parser的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • idea配置tomcat,idea配置web下lib的包详解

    idea配置tomcat,idea配置web下lib的包详解

    这篇文章主要介绍了idea配置tomcat,idea配置web下lib的包,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • spring NamedContextFactory在Fegin配置及使用详解

    spring NamedContextFactory在Fegin配置及使用详解

    在我们日常项目中,使用FeignClient实现各系统接口调用变得更加简单, 在各个系统集成过程中,难免会遇到某些系统的Client需要特殊的配置、返回读取等需求。Feign使用NamedContextFactory来为每个Client模块构造单独的上下文(ApplicationContext)
    2023-11-11
  • Spring Boot项目中jar包在服务器上启动的正确姿势

    Spring Boot项目中jar包在服务器上启动的正确姿势

    这篇文章主要给大家介绍了关于Spring Boot项目中jar包在服务器上启动的正确姿势,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Java I/O (Input/Output)文件字节流举例详解

    Java I/O (Input/Output)文件字节流举例详解

    Java的输入输出流(IO)是用于与外部设备(如文件、网络连接等)进行数据交互的机制,下面这篇文章主要给大家介绍了关于Java I/O (Input/Output)文件字节流的相关资料,需要的朋友可以参考下
    2024-08-08
  • Springboot如何基于assembly服务化实现打包

    Springboot如何基于assembly服务化实现打包

    这篇文章主要介绍了Springboot如何基于assembly服务化实现打包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java检查字符串是否一致的四种方法

    Java检查字符串是否一致的四种方法

    字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等,在 Java 中,比较字符串的常用方法有四个:equals(),equalsIgnoreCase(),compareTo()和compareToIgnoreCase(),下面详细介绍这四个方法的使用
    2024-04-04
  • 基于springboot实现文件上传

    基于springboot实现文件上传

    这篇文章主要为大家详细介绍了基于springboot实现文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • java 判断两个时间段是否重叠的案例

    java 判断两个时间段是否重叠的案例

    这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论