Spring拦截器Interceptor的使用

转自: https://blog.csdn.net/weixin_36927395/article/details/81067146

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36927395/article/details/81067146
Spring的拦截器(HandlerInterceptor【接口–实现】/HandlerInterceptorAdapter【继承和重写相关的方法】)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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


/**
 * @ClassName AuthorityInterceptor
 * @Author 莫邪
 * @Description TODO 拦截器
 * @Date Created in 18:48 2018/6/6
 * @Version 1.0
 */
@Component
public class AuthorityInterceptor implements HandlerInterceptor {


    @Override//在一个请求进入Controller层方法执行前执行这个方法
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //在这里可以对参数做一些预处理和做一些验证
        return true;//方法给予执行,就是允许controller的方法进行执行
        //false 不允许,可以在这之前在reponse中编写返回的结果

    }
    //返回model前
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //Controller执行完毕后,返回之前,可以对request和reponse进行处理
        //如果是前后端没有分离,在进入View层中前执行
    }

    //返回model后
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //在一个请求处理完毕,即将销毁的时候,执行,可以做一些资源释放之类的工作
    }
}

写好代码还需要对其进行配置,如果有多个拦截器,拦截器的执行顺序是按照声明的顺序。 
第一种配置方式 
使用SpringBoot的话我们可以对其进行Java配置,需要和配置类同一个包下或者在其包下的子包中,不然得使用@ComponentScan(basePackages = {“com.”})开启注解扫描


/**
 * @ClassName MyConfig
 * @Author 莫邪
 * @Description TODO
 * @Date Created in 19:06 2018/6/6
 * @Version 1.0
 */

import com.tmo.tmo_sms.Interceptor.AuthorityInterceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;

import org.springframework.context.annotation.EnableAspectJAutoProxy;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootConfiguration
@EnableAspectJAutoProxy
public class MyConfig extends WebMvcConfigurerAdapter{

    @Autowired
    private AuthorityInterceptor authorityInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authorityInterceptor).addPathPatterns("/user/**");//配置拦截的路径,可以传多个参数
        /*registry.addInterceptor(authorityInterceptor).addPathPatterns("/**");*/
    }
}

第二种配置方式,注意使用这种方式不需要再使用@Component在拦截器上声明 
在spring 的配置文件中配置相关的配置,注意需要的配置文件声明

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
     http://www.springframework.org/schema/context  
     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
     http://www.springframework.org/schema/mvc  
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

然后可以在配置文件中进行相关的配置

<mvc:interceptors>  
    <!-- 使用 bean声明定义一个Interceptor,但是如果是直接定义在 mvc:interceptors 下面的 Interceptor将会拦截所有的请求 -->  
    <!--<bean class="com.xxx.xxx.AuthorityInterceptor"/> -->
    <mvc:interceptor>  
        <!--定义在这里的拦截器将会拦截特定的请求-->
        <mvc:mapping path="/user/**"/>  
        <bean class="com.hit.interceptor.LoginInterceptor"/>  
    </mvc:interceptor>  
</mvc:interceptors>  

先声明的拦截器将会先执行 
下面定义一个拦截器栈,拦截顺序从上到下

<mvc:interceptors>
        <bean class="com.xxx.AAAInterceptor"/>
        <bean class="com.xxx.BBBInterceptor"/>
        <bean class="com.xxx.CCCInterceptor"/>
 </mvc:interceptors>
————————————————
版权声明:本文为CSDN博主「轻云K」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36927395/article/details/81067146

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值