# SpringSecurity-Demo **Repository Path**: Azzurro2000/spring-security-demo ## Basic Information - **Project Name**: SpringSecurity-Demo - **Description**: SpringSecurtiy使用的示例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-05-21 - **Last Updated**: 2024-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringSecurity ## README # SpringSecurity 登录校验 权限认证 ## SpringSecurity的原理 SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。 **UsernamePasswordAuthenticationFilter**:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。 **ExceptionTranslationFilter**:处理过滤器链中抛出的任何AccessDeniedException和 AuthenticationException 。 **FilterSecurityInterceptor**:负责权限校验的过滤器。 ![系统同介绍](./img/image-callProcess.png) ## SpringSecurity底层源码 **Authentication接口**: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。 **AuthenticationManager接口**:定义了认证Authentication的方法 **UserDetailsService接口**:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的方法。 **UserDetails接口**:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装成UserDetails对象返回。然后将这些信息封装到Authentication对象中。 ![源码](./img/image-SpringSecurityPrinciple.png) ## Demo的登录流程 源代码简易流程图 **登录** 1. 自定义登录接口 :调用ProviderManager的方法进行认证 如果认证通过生成jwt把用户信息存入redis中 2. 自定义UserDetailsService:在这个实现类中去查询数据库 **校验** 定义Jwt认证过滤器: 获取token,解析token获取其中的userid,从redis中获取用户信息, 存入SecurityContextHolder ![demo](./img/image-SrcCallProcess.png)