|
|
51CTO旗下网站
|
|
移步端
  • SpringBoot优雅的安排拦截器方式

    其实spring boot阻碍器的安排方式和springMVC差不多,只有部分小的变动需要注意下就ok了。下主要介绍两种备用的阻挠器。

    笔者:刘少奇 来源:Java知音| 2020-03-25 17:55

    其实spring boot阻碍器的安排方式和springMVC差不多,只有部分小的变动需要注意下就ok了。

    下主要介绍两种备用的阻挠器:

    一、基于URL贯彻的阻挠器:

          
    1. public class LoginInterceptor extends HandlerInterceptorAdapter{  
    2.     /**  
    3.      * 在呼吁处理之前进行实用(Controller办法调用之前)  
    4.      * 基于URL贯彻的阻挠器  
    5.      * @param request  
    6.      * @param response  
    7.      * @param handler  
    8.      * @return  
    9.      * @throws Exception  
    10.      */  
    11.     @Override  
    12.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
    13.         String path = request.getServletPath();  
    14.         if (path.matches(Const.NO_INTERCEPTOR_PATH)) {  
    15.             //不需要的阻挠直接过  
    16.             return true;  
    17.         } else {  
    18.             // 这写你拦截需要干的事务,比如取缓存,SESSION,权限判断等  
    19.             System.out.println("====================================");  
    20.             return true;  
    21.         }  
    22.     }  

    第一代码:path.matches(Const.NO_INTERCEPTOR_PATH 就是基于正则匹配的url。

          
    1. /**  
    2.  * @author     BianP  
    3.  * @explain 常量类  
    4.  */  
    5. public class Const {  
    6.     public static final String SUCCESS = "SUCCESS" 
    7.     public static final String ERROR = "ERROR" 
    8.     public static final String FIALL = "FIALL" 
    9.     /**********************目标和个人****************************/  
    10.     public static final String SESSION_USER = "loginedAgent"; // 他家对象  
    11.     public static final String SESSION_LOGINID = "sessionLoginID"; // 登录ID  
    12.     public static final String SESSION_USERID = "sessionUserID"; // 眼前用户对象ID编号  
    13.     public static final String SESSION_USERNAME = "sessionUserName"; // 眼前用户对象ID编号  
    14.     public static final Integer PAGE = 10; // 默认分页数  
    15.     public static final String SESSION_URL = "sessionUrl"; // 把记录的url  
    16.     public static final String SESSION_SECURITY_CODE = "sessionVerifyCode"; // 登录页验证码 
    17.     // 时光 缓存时间  
    18.     public static final int TIMEOUT = 1800;// 秒  
    19.     public static final String ON_LOGIN = "/logout.htm" 
    20.     public static final String LOGIN_OUT = "/toLogout" 
    21.     // 不验证URL anon:不验证/authc:受控制的  
    22.     public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(anon)).*" 

    二、基于注解的阻挠器

    ①创造注解:

          
    1. /**  
    2.  * 在需求登录验证的Controller的主意上采取此注解  
    3.  */  
    4. @Target({ElementType.METHOD})// 租用在艺术名上  
    5. @Retention(RetentionPolicy.RUNTIME)// 运作时有效  
    6. public @interface LoginRequired {   

    ②创造拦截器:

          
    1. public class AuthorityInterceptor extends HandlerInterceptorAdapter{  
    2.      @Override  
    3.      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
    4.         // 如果不是炫耀到艺术直接穿过  
    5.         if (!(handler instanceof HandlerMethod)) {  
    6.             return true;  
    7.         }  
    8.         // ①:START 办法注解级拦截器  
    9.         HandlerMethod handlerMethod = (HandlerMethod) handler;  
    10.         Method method = handlerMethod.getMethod();  
    11.         // 认清接口是否需要登录  
    12.         LoginRequired methodmethodAnnotation = method.getAnnotation(LoginRequired.class);  
    13.         // 有 @LoginRequired 诠释,要求认证  
    14.         if (methodAnnotation != null) {  
    15.             // 这写你拦截需要干的事务,比如取缓存,SESSION,权限判断等  
    16.             System.out.println("====================================");  
    17.             return true;  
    18.         }  
    19.         return true;  
    20.     }  

    三、把拦截器添加到配置中,相当于SpringMVC时的配置文件干的事务:

          
    1. /**  
    2.  * 和springmvc的webmvc阻碍配置一样  
    3.  * @author BIANP  
    4.  */  
    5. @Configuration  
    6. public class WebConfigurer implements WebMvcConfigurer {  
    7.      @Override  
    8.      public void addInterceptors(InterceptorRegistry registry) {  
    9.         // 阻碍所有请求,穿过判断是否有 @LoginRequired 诠释 决定是否需要登录  
    10.         registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**");  
    11.         registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**");  
    12.      }  
    13.      @Bean  
    14.      public LoginInterceptor LoginInterceptor() {  
    15.          return new LoginInterceptor();  
    16.      }  
    17.      @Bean  
    18.      public AuthorityInterceptor AuthorityInterceptor() {  
    19.          return new AuthorityInterceptor();  
    20.      }  

    1、永恒要加@Configuration 其一注解,在起步的时节在会把加载。

    2、有部分教程是用之“WebMvcConfigurerAdapter”,不过在spring5.0本子后这个类被丢弃了 WebMvcConfigurerAdapter ,虽然还可以用,但是看起来不好。

    3、也有部分教程使用的WebMvcConfigurationSupport,我利用后发现,classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/不生效。现实可以原因,大家可以看下源码因为:WebMvcAutoConfiguration上有个条件注解:

          
    1. @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 

    故此还是建议使用WebMvcConfigurer, 其实springMVC有的是东西,都得以搬到springboot官方来行使,只要求把配置文件的全封闭式,转移 对应@Configuration 类就好了。

    【义务编辑: 庞桂玉 TEL:(010)68476606】

    点赞 0
  • SpringBoot  阻碍器  Java
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

     迅速无敌之 Gitlab CI 接轨集成

    迅速无敌之 Gitlab CI 接轨集成

    打破运维与科研壁垒
    共5章 | KaliArch

    91人口订阅学习

    秒杀高并发白话实战

    秒杀高并发白话实战

    主流高并发架构
    共15章 | 51CTO崔皓

    59人口订阅学习

    网络排障一点通

    网络排障一点通

    网络排障及优化调整案例
    共20章 | 捷哥CCIE

    465人口订阅学习

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微

    <nav id="a09ff9b3"></nav>
  •