最近项目中要做与其它平台的集成,而当前框架使用了SpringBoot Security的技术进行的安全验证,所以特意查阅资料做一些了解,然后对其进行改造做单点的接入;

本篇中,先说验证的内容,授权将放到另一篇来说明;

springboot滑动验证码 aj springboot滑块验证_字符串

 

通常,我们写一个控制器,直接访问是没有阻拦的,但同时也就缺少了安全的保障,数据谁都可以访问,谁都可以修改;

于是,在pom.xml文件中增加如下配置

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

再启动运行,此时会发现,请求会被拦截,跳转到一个登陆页面

springboot滑动验证码 aj springboot滑块验证_springboot滑动验证码 aj_02

 

 

其根本原因,是添加了依赖后,启动了安全验证,在程序中增加了一个过滤器链来做验证处理。

springboot滑动验证码 aj springboot滑块验证_字符串_03

 

 

 对于用户的验证,最关键的就是UsernamePasswordAuthenticationFilter这个过滤器了。那么,想根据实际需求来使用的话,就是对这些过滤器进行配置和调整;

通过调试,可以大致发现几个关键点:

认证UsernamePasswordAuthenticationFilter,通过父类的doFilter开始。调到了本类中的attemptAuthentication方法,即试图去认证;

springboot滑动验证码 aj springboot滑块验证_字符串_04

前面都是取用户名和密码。下面红框里面的是验证的开始。

springboot滑动验证码 aj springboot滑块验证_字符串_05

 

默认走的验证提供者是DaoAuthenticationProvider这个实例对象

springboot滑动验证码 aj springboot滑块验证_用户名_06

 

 在这个代码逻辑中,会有个找用户的过程

springboot滑动验证码 aj springboot滑块验证_spring_07

 

通过用户名找用户,userDatailService对象,默认是使用的

springboot滑动验证码 aj springboot滑块验证_springboot滑动验证码 aj_08

 

 

springboot滑动验证码 aj springboot滑块验证_springboot滑动验证码 aj_09

 

在这个类中,通过接口继承,实现了UserDetailsService接口定义的loadUserByUsername方法,返回的类型是UserDetails。

 得到用户信息后,就该返回认证提供对象中,对请求用户与库用户进行比如认证了。

springboot滑动验证码 aj springboot滑块验证_字符串_10

 

springboot滑动验证码 aj springboot滑块验证_字符串_11

 

如果通过,就直接向后走,如果不通过就抛异常。而比对密码,采用了 bcrypt 方式

springboot滑动验证码 aj springboot滑块验证_用户名_12

 

 成功之后,创建了一个认证后的UsernamePasswordAuthenticationToken对象

springboot滑动验证码 aj springboot滑块验证_spring_13

 

 UsernamePasswordAuthenticationToken对象,其实前面也创建过,而后面创建的这个与前面的不同之处在于,前面的是用的两参构造,后面用的是三参构造。出现的不一致现象就是

springboot滑动验证码 aj springboot滑块验证_用户名_14

 

 这个在后面很关键。最后就是将认证后的对象,赋给SecurityContextHolder,理解为安全上下文持有对象吧。到目前,验证基本结束。

springboot滑动验证码 aj springboot滑块验证_用户名_15

 

 

 

 


 

 小提示:

上面提到的跳到了默认登陆页,用户名为:user  密码为:运行时,在控制台输出的一行字符串,通过这个密码,即可登陆;

springboot滑动验证码 aj springboot滑块验证_spring_16

 

 

登陆后,再访问相关的地址就能直接通过了。因为它内部采用了session机制对当前用户进行了缓存。

springboot滑动验证码 aj springboot滑块验证_springboot滑动验证码 aj_17

 

 

 

springboot滑动验证码 aj springboot滑块验证_字符串_18