springSecurity自定义用户登录及JWT-认证
2025-4-20
| 2025-4-20
Words 996Read Time 3 min
type
status
date
slug
summary
tags
category
icon
password
主要流程是前端把用户名和密码传到服务器,服务器进行对比,如果校验正确,那么返回给前端一个 token。前端每次访问接口的时候都携带token,从 token 中解析出 userid,查看该用户是否有相关目标的访问权限,根据情况返回响应。
notion image
image-20230712162224634

springSecurity 流程

springSecurity 是一连串的过滤器链,通过实现各个过滤器,来达到权限校验的流程。
notion image
image-20230713173617502
图中只展示了核心过滤器,其它的非核心过滤器并没有在图中展示。
UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。
ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException 。
FilterSecurityInterceptor:负责权限校验的过滤器。

springSecurity实现自定义用户名和密码校验

创建用户权限实体类,实现UserDetails接口

里面有一个有参构造器,里面存储了用户信息和权限信息。
实现UserDetailsService接口,实现自己的方法,从数据库里面查找用户。
返回的对象也是上一步自己实现的用户类,返回用户信息和权限信息。

加入 JWT

上一步是实现了 springSecurity 中的方法,让 SpringSecurity 帮你调用了方法进行校验,那么如何让我们根据自己的业务逻辑进行调用呢?
这样的话,如果校验通过了,就可以根据用户信息生成 token,响应给前端。
这样的话还需要写一个过滤器,当前端访问接口的时候进行校验 token 的信息。
如果 token 能够正确解析,并且可以从 redis 里访问到,那么就可以认为 token 没问题,然后把权限信息封装到 SpringSecurity 的上下文中,最后放行,否则抛出错误信息。
把定义的 JWT过滤器加入到 SpringSecurity 的最前面即可。
Spring背景及快速入门-hspspringmvc数据的存取
Loading...