转载

原 荐 Spring Boot 优雅的配置拦截器方式

边鹏【尛爺鑫】的个人空间 技术探讨

正文

Spring Boot 优雅的配置拦截器方式

原 荐 Spring Boot 优雅的配置拦截器方式
  边鹏_尛爺鑫 发布于 6分钟前

字数 746

阅读 1

收藏 0

Spring Spring Boot Interceptor

开发十年,就只剩下这套Java开发体系了 >>> 原 荐 Spring Boot 优雅的配置拦截器方式

其实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 methodAnnotation = method.getAnnotation(LoginRequired.class);
        // 有 @LoginRequired 注解,需要认证
        if (methodAnnotation != null) {
            // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等
            System.out.println("====================================");
            return true;
        }
        return true;
	}
}

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

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

一定要加@Configuration  这个注解,在启动的时候在会被加载。还有一些教程是用的“WebMvcConfigurerAdapter”,也是一样的,但是会提示这个方法是过时的了。

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

原 荐 Spring Boot 优雅的配置拦截器方式

© 著作权归作者所有

共有人打赏支持

上一篇: 分分钟看懂java用引用传递与值传递在堆栈中的规则

下一篇: Spring Boot + Mybatis Plus 整合——双剑合璧

原 荐 Spring Boot 优雅的配置拦截器方式

边鹏_尛爺鑫

粉丝 20

博文 28

码字总数 21591

作品 0

成都

程序员

提问

相关文章 最新文章

spring boot 2.x静态资源会被HandlerInterceptor拦截的原因和解决方法

在spring boot 1.5.x中,resources/static目录下的静态资源可以直接访问,并且访问路径上不用带static,比如静态资源放置位置如下图所示: 那么访问静态资源的路径可以是: http://localhost...

Mr---D

04/13

0

0

第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?

初升级版本,在已经使用的系统内还是存在一些兼容性的问题,有很多变化!!!也存在一些过时的方法、配置文件信息以及类,我们在之前版本的中可以使用抽象类来处理相关的配置,由于版本最低支...

恒宇少年

03/17

0

0

原 荐 Spring Boot 优雅的配置拦截器方式
SpringBoot详解(三)-Spring Boot的web开发

SpringBoot详解系列文章: SpringBoot详解(一)-快速入门 SpringBoot详解(二)-Spring Boot的核心 SpringBoot详解(三)-Spring Boot的web开发 SpringBoot详解(四)-优雅地处理日志 一、w...

CSDN_LQR

2017/08/30

0

0

原 荐 Spring Boot 优雅的配置拦截器方式
Spring Boot入门资料整理

Spring Boot 初识 SpringBoot前世今生 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望。 Spring Boot参考指南中文版--Chapter1.Spring Boot中文文档 本节提供...

小致dad

2017/11/07

0

0

Spring Boot学习笔记

RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装rabbitMQ步骤 多线程 Spring @transactional注解和synchronized同步锁同时使用不...

OSC_fly

07/26

0

0

没有更多内容

加载失败,请刷新页面

加载更多
小论Java泛型机制

何为泛型(Generics) 面向对象编程语言的多态特性包括:任一多态(ad hoc polymorphism,又名重载)、子类型多态(subtype polymorphism,又名覆盖)以及参数多态(parameter polymorphism,...

SamYjy

33分钟前

2

0

原 荐 Spring Boot 优雅的配置拦截器方式
通过JS+DIV+CSS排版布局实现选项卡效果

CSS介绍及布局特定 层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。 CSS目前最新版本为CSS3,是能够真正做到...

青衣霓裳

33分钟前

2

0

原 荐 Spring Boot 优雅的配置拦截器方式
看图了解RocksDB

它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三个组成...

许此一生

39分钟前

10

0

原 荐 Spring Boot 优雅的配置拦截器方式
重磅发布!阿里云推PostgreSQL 10 高可用版

2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL、SQL Server 和PostgreSQL关系型数据库的云计算服务商。 用户在云上就能享受PostgreSQL引擎带来的...

迷你芊宝宝

40分钟前

4

0

原 荐 Spring Boot 优雅的配置拦截器方式
Mysql show Status参数详解

状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务器而失败的连接数 Binlog_cache_dis...

若杰

46分钟前

1

0

没有更多内容

加载失败,请刷新页面

加载更多
原文  https://my.oschina.net/bianxin/blog/2876640
正文到此结束
Loading...