SpringBoot优雅的配置拦截器方式

栏目: IT技术 · 发布时间: 4年前

内容简介:其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。下面主要介绍两种常用的拦截器:

SpringBoot优雅的配置拦截器方式

其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。

下面主要介绍两种常用的拦截器:

一、基于URL实现的拦截器:

public class LoginInterceptor extends HandlerInterceptorAdapter{  
    /**  
     * 在请求处理之前进行调用(Controller方法调用之前)  
     * 基于URL实现的拦截器  
     * @param request  
     * @param response  
     * @param handler  
     * @return  
     * @throws Exception  
     */  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        String path = request.getServletPath();  
        if (path.matches(Const.NO_INTERCEPTOR_PATH)) {  
            //不需要的拦截直接过  
            return true;  
        } else {  
            // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等  
            System.out.println("====================================");  
            return true;  
        }  
    }  
} 

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

/**  
 * @author     BianP  
 * @explain 常量类  
 */  
public class Const {  
    public static final String SUCCESS = "SUCCESS";  
    public static final String ERROR = "ERROR";  
    public static final String FIALL = "FIALL";  
    /**********************对象和个体****************************/  
    public static final String SESSION_USER = "loginedAgent"; // 用户对象  
    public static final String SESSION_LOGINID = "sessionLoginID"; // 登录ID  
    public static final String SESSION_USERID = "sessionUserID"; // 当前用户对象ID编号  
    public static final String SESSION_USERNAME = "sessionUserName"; // 当前用户对象ID编号  
    public static final Integer PAGE = 10; // 默认分页数  
    public static final String SESSION_URL = "sessionUrl"; // 被记录的url  
    public static final String SESSION_SECURITY_CODE = "sessionVerifyCode"; // 登录页验证码 
    // 时间 缓存时间  
    public static final int TIMEOUT = 1800;// 秒  
    public static final String ON_LOGIN = "/logout.htm";  
    public static final String LOGIN_OUT = "/toLogout";  
    // 不验证URL anon:不验证/authc:受控制的  
    public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(anon)).*";  
} 

二、基于注解的拦截器

①创建注解:

/**  
 * 在需要登录验证的Controller的方法上使用此注解  
 */  
@Target({ElementType.METHOD})// 可用在方法名上  
@Retention(RetentionPolicy.RUNTIME)// 运行时有效  
public @interface LoginRequired {   
} 

②创建拦截器:

public class AuthorityInterceptor extends HandlerInterceptorAdapter{  
     @Override  
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        // 如果不是映射到方法直接通过  
        if (!(handler instanceof HandlerMethod)) {  
            return true;  
        }  
        // ①:START 方法注解级拦截器  
        HandlerMethod handlerMethod = (HandlerMethod) handler;  
        Method method = handlerMethod.getMethod();  
        // 判断接口是否需要登录  
        LoginRequired methodmethodAnnotation = method.getAnnotation(LoginRequired.class);  
        // 有 @LoginRequired 注解,需要认证  
        if (methodAnnotation != null) {  
            // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等  
            System.out.println("====================================");  
            return true;  
        }  
        return true;  
    }  
} 

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

/**  
 * 和springmvc的webmvc拦截配置一样  
 * @author BIANP  
 */  
@Configuration  
public class WebConfigurer implements WebMvcConfigurer {  
     @Override  
     public void addInterceptors(InterceptorRegistry registry) {  
        // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录  
        registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**");  
        registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**");  
     }  
     @Bean  
     public LoginInterceptor LoginInterceptor() {  
         return new LoginInterceptor();  
     }  
     @Bean  
     public AuthorityInterceptor AuthorityInterceptor() {  
         return new AuthorityInterceptor();  
     }  
} 

1、一定要加@Configuration 这个注解,在启动的时候在会被加载。

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

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

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 

所以还是建议使用WebMvcConfigurer, 其实springMVC很多东西,都可以搬到springboot中来使用,只需要把配置文件的模式,改成 对应@Configuration 类就好了。

【责任编辑:庞桂玉 TEL:(010)68476606】


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Blog Design Solutions

Blog Design Solutions

Richard Rutter、Andy Budd、Simon Collison、Chris J Davis、Michael Heilemann、Phil Sherry、David Powers、John Oxton / friendsofED / 2006-2-16 / USD 39.99

Blogging has moved rapidly from being a craze to become a core feature of the Internetfrom individuals sharing their thoughts with the world via online diaries, through fans talking about their favori......一起来看看 《Blog Design Solutions》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试