SpringBoot如何添加拦截器
在web开发中,为了实现登录权限验证,我们不可能在每个方法中都写代码去验证身份信息,常见的是在springboot中添加一个拦截器在用户的的请求到达controller层的时候实现登录验证,那么SpringBoot如何添加拦截器呢?
步骤如下:
一、新建拦截器
既然要使用拦截器,那肯定需要有一个自己定义的拦截器,所以新建一个拦截器:
自定义拦截器需要继承HandlerInterceptorAdapter并重写preHandle方法
public class AuthInterceptor extends HandlerInterceptorAdapter
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
// 拦截处理代码
System.out.println("拦截到了");
//返回true通过,返回false拦截
return true;
}
}
二、注册拦截器
新建配置类继承WebMvcConfigurerAdapter类,重写addInterceptors方法。如下:
既然要增加自己的拦截器,那当然要得到springboot加入拦截器的入口,然后把我们自己写的拦截器也注册到springboot中让其起作用。
//注册拦截器
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter
{
@Override
public void addInterceptors(InterceptorRegistry registry)
{
//注册自己的拦截器并设置拦截的请求路径
registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
需要加入@Configuration注解,在springboot启动的时候就会该配置类就会被扫描并加载,从而将我们的拦截器注册进去。这时候的拦截器已经可以正常工作了,拦截的逻辑代码都在写AuthInterceptor类的preHandle方法中。
三、拦截器的注解用法
实际开发中有一些方法是需要拦截的,有一下方法是不需要拦截的,因此如果要在每个方法中写明需不需要拦截就变得非常麻烦,因此用Java中的反射和注解机制来简化操作:
-
编写注解类如下:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LoginRequired { boolean loginSuccess() default true; }
之后在需要被拦截的方法上使用该注释标注。
-
在第一步中的AuthInterceptor类中的preHandle方法判断被拦截的方法是否带有我们的注释LoginRequired:
public class AuthInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 拦截处理代码 HandlerMethod method = (HandlerMethod) handler; LoginRequired loginRequired = method.getMethodAnnotation(LoginRequired.class); if (null != loginRequired) { //这个是需要拦截的方法 } else { //这个是不需要拦截的方法 return true; } //返回true通过,返回false拦截 return true; } }
四、测试
- 在需要拦截的方法上加上
@LoginRequired
注解。 - 在AuthInterceptor中写相应的处理代码即可使用。