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中寫相應的處理代碼即可使用。