0、前言

       今天在做项目的时候,写一个无session登录拦截以及部分页面放行的功能时,使用的传统方法,当配置项过多、并且这些配置项以后可能会更改,这种传统的方式将所有的配置项都写死在了java类中,感觉耦合度非常高,所以我就想:能不能对这种方式做一些优化?我想了很多种方案,不断尝试,例如使用注解注入配置文件的方式,我试了以下几种注解注入,结果要不就是报一堆异常,要不就是不能达到目的:

@ImportResource("classpath:ListUrl.yml")
@PropertySource("classpath:ListUrl.yml")
@ConfigurationProperties("whitelist")
@EnableConfigurationProperties(LoginFilterConfig.class)

最后,功夫不负有心人,我找到了一种堪称完美的方式:使用springboot配置文件+Data赋值注入的方式,实现解耦合!

(我也将它记录到了我的个人网站:https://doublepeach.gitee.io,欢迎来访!)

再介绍我这种方式之前,先给大家看看传统的方式完成登录拦截和放行功能的写法:

1、传统写法

(1)定义一个拦截器,并实现HandlerInterceptor并配置拦截条件以及页面跳转

(2)定义过滤器类,并实现WebMvcConfigurer接口中的addInterceptors

手动创建List集合,并将放行的页面的字符串一个个添加到list中

 

完成

        这样就使用传统的方式完成了登录拦截和部分页面放行的功能,但这种方式从代码上看,很明显的一个缺陷就是设置放行页面时,代码耦合度太高,将来某一天想取消放行或增加额外的放行页面时,还需要修改java源代码。
 

       所以我想到了使用配置文件的方式,将这些放行页面的路径字符串添加为springboot的list集合配置项,然后在java代码中注入该集合,实现配置文件的读取。 

将来修改放行页面时直接在配置文件中改,这样不就耦合度大大降低了吗?

下面说说今天的主角:

2、配置文件的方式

(1)配置拦截器,这步同上,没有变化

(2)springboot主配置文件声明放行页面的配置项

这里一定要注意List集合在yml配置文件中的书写方式

- 与 list元素之间有空格!

(3)配置拦截器

***注解作用以及原理解释:

 - 使用Lombok中的@Data注解进行属性的赋值注入

 - 添加了@Configuration注解后,此类会被spring容器标记为配置类,springboot会将其主配置文件application.yml中的配置项与此类中的属性进行”按名对应“,并通过Set方法注入(此步使用@Data自动完成)

 - @ConfigurationProperties注解设置配置项的前缀

 

完成

      这样,优化后的这种读取配置文件的方式实现登录拦截放行功能就完成了,相比传统的那种,不仅代码更简洁,而且耦合度更低,代码更易于修改维护管理,以后遇到类似的可以使用配置文件解耦合的地方可以经常使用!!!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐