SpringBoot+Security+JWT进阶:三、自定义认证测试

前言

不知不觉已经距离上次开发已经有11个月了,这11个月也不是没有学习,只不过项目太忙,学习的主要路径都在项目上。

阅读下文要了解

不会搭建的可以查看基础

SpringBoot+Security+JWT基础
SpringBoot+Security+JWT进阶:一、自定义认证
SpringBoot+Security+JWT进阶:二、自定义认证实践

一、登录测试一

发起请求

可以使用postman来测试

根据.loginProcessingUrl("/auth/login")设置的登录接口。

用户名super.setUsernameParameter(GT_BOOT_FORM_USERNAME_KEY);在这里设置过,

1
2
3
4
http://127.0.0.1:8888/boot/auth/login
body 选择 form-data
loginName admin一
password 1

请求经过的代码

1、自定义的UsernamePasswordAuthenticationFilter实现类

如果我们自定义了用户账号的验证,当前请求首先经过attemptAuthentication方法获取用户信息。

2、自定义的AuthenticationProvider实现类

我们在这里实现了自定义认证服务authenticate方法做具体的认证操作。

一3、userDetailsService实现类获取登录用户

验证当前用户是否存在,如果不存在,则抛出throw new UsernameNotFoundException("用户不存在");异常,直接到UsernamePasswordAuthenticationFilter.unsuccessfulAuthentication处理当前异常,可以自定义返回信息。

验证通过后,会调用createSuccessAuthentication创建 token

然后回到

4、自定义的UsernamePasswordAuthenticationFilter实现类

successfulAuthentication方法。

登录常用的路径就是这些。

二、携带 token 的请求测试

发起请求

请求经过的代码

BasicAuthenticationFilter.doFilterInternal过滤器

可以获取token中的用户信息

AuthenticationEntryPoint.commence验证失败

403禁止访问错误会进入当前端点。

验证成功后就直接访问到接口了。

到这里一个基本的验证就结束了,后续还可以给用户信息添加redissession缓存,部署集群要做session共享;分布式要做rpc;访问不同数据库(一般作为服务来访问,不需要访问多数据库)。

推荐
SpringBoot+Security+JWT基础
SpringBoot+Security+JWT进阶:一、自定义认证
SpringBoot+Security+JWT进阶:二、自定义认证实践
gitee多数据源
IDEA好用的插件

本文地址: https://github.com/maxzhao-it/blog/post/29753/