内容介绍:spring boot拦截器做登录验证,并实现单点登录功能(分布式项目中);
目录
一、springboot中使用拦截器(interceptor)的相关知识点
二、spring boot + vue 前后端分离跨域问题的解决:
一、springboot中使用拦截器(interceptor)的相关知识点
首先,先介绍最基本的拦截器的创建:
①自定义类,让其实现HnadlerInterceptor接口,并实现其三个方法:
perHandle:在请求进来之前进行作用——主要的拦截实现逻辑在该方法中实现
postHandle:在请求处理之后进行作用:
afterCompletion:都将会进行处理的步骤:
注意:在perHandler方法中,依据返回值Boolean的值来表示,本次的拦截是放行(True)还是阻止(False),放行则请求继续往下进行,阻止则表示请求无法访问其预期的资源。
②自定义类,让其实现WebMvcConfigurer接口作为同意的spring mvc相关的配置类(该配置类需使用@Configuration交给spring管理);在该接口中,有许多与mvc配置相关的方法,如果要实现拦截器,则需要重写其addInterceptors方法;
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通过registry的addInterceptor方法,创建InterceptorRegistration对象,参数传递自定义拦截器类
InterceptorRegistration registration = registry.addInterceptor(new MyInterceptor());
// addPathPatterns(),方法为指明需要拦截的目录,可传递list或者数组
registration.addPathPatterns("/**");
// excludePathPatterns,方法为指明不进行拦截的目录,可传递list或数组;
registration.excludePathPatterns("/it/hr/login");
// 目录书写格式为从端口号后开始书写——也可以理解为从controller类上的url格式开始书写
}
如此便完成springboot中拦截器的配置;
二、spring boot + vue 前后端分离跨域问题的解决:
首先,来说说跨域问题;
出现跨域的原因在于,访问资源的请求的协议、ip地址、端口号三者中有任意一个与所请求的资源的协议、ip地址和端口号不同,便会产生跨域问题,
举例说明,在使用spring boot + vue 进行前后端分离开发时,spring boot后端项目运行在tomcat服务器上,其有着自己ip地址和端口号(测试环境下可能ip地址是相同的),而vue项目运行在node.js服务器上,也有着自己的ip地址和端口号,当需要在vue中访问spring boot项目提供的接口时,便会因为二者的端口号不同而产生跨域问题;
接着,跨域问题的解决:
跨域问题的解决有多种方案,这边先罗列2种(更多的有待进一步更新):
①通过在每一个controller上使用@CrossOrigin注解,解决跨域问题;
②在Mvc配置类种,配置addCorsMappings方法来一次性解决跨域问题:
@Override
public void addCorsMappings(Co