# springsecurity-learn **Repository Path**: xieyue86/springsecurity-learn ## Basic Information - **Project Name**: springsecurity-learn - **Description**: springboot spring security 登录认证方式配置,包括账号密码、手机号认证、邮箱登录 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 5 - **Created**: 2024-01-14 - **Last Updated**: 2025-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 1 form-login ![](./images/20210730151220513.png) ``` 表单的登录方式 SecurityContextPersistenceFilter 拦截所有的请求,共享会话将session中的 SecurityContext 信息放进线程上下文中。 AbstractAuthenticationProcessingFilter 判断是否需要认证,需要认证就获取认证 Authentication, 然后放进 session 中。 未认证的由 UsernamePasswordAuthenticationFilter 创建 UsernamePasswordAuthenticationToken 进行认证,委托 ProviderManager(即 AuthenticationManager) 发起认证,由多个 AuthenticationProvider 接口列表组成,选取 DaoAuthenticationProvider 调用 UserDetailsService 方法进行用户查询,最终返回 AuthenticationToken 即 UsernamePasswordAuthenticationToken 过程中出现 认证失败交由 ExceptionTranslationFilter 进行处理, FilterSecurityInterceptor 中配置拦截规则,判断用户是否有权限访问资源 https://blog.csdn.net/justlpf/article/details/90347610 ``` #### 2 multi-login ``` springboot security 登录认证配置 账号密码的登录方式 邮箱验证码的方式 手机号验证码的方式 ``` ``` security thymealf https://blog.csdn.net/weixin_47072986/article/details/129906896 ``` ``` springsecurity 默认登录页面 login logout 不需要登录页面 过滤器链 springsecurity CsrfFilter 跨站 CorsFilter 跨域 UsernamepasswordAuthenticationFilter 用户名密码 ExcceptionTranslationFilter 认证授权的异常处理 AcccessDenied Authentication FilterSecurityInterceptor 负责权限校验 UsernamepasswordAuthenticationFilter -> ProviderManager -> DaoAuthenticationProvider 封装 Authentication 对象调用 authenticate 方法进行认证 调用 loadUserByUsername 方法查询 Userdetails 对象 SecurityContextHolder 获取上下文用户信息 ``` #### ssl ``` 输入openssl 输入genrsa -out private.key 2048生成私钥 输入rsa -in private.key -pubout -out public.key生成公钥 JWT用于登录身份验证,用户成功登录后会根据用户信息生成一个token 返回给客户端,其中包含用户信息,客户端每次请求都要在请求头 Authorization 上携带 token 信息, 后端拿到token 信息后,通过 secretKey 解密信息进行身份验证。 JWT生成的Token由三部分组成:header.payload.signature JWT由三部分组成:header(头部)、payload(载荷)、signature(签名) JWT的格式为:header.payload.signature, 都是通过 base64进行编码 header alg 指定 signature 采用的加密算法,默认是 HS256,对称加密算法 typ 固定值为 jwt payload 用户信息,令牌签发时间,令牌过期时间 signature 设置 secretkey, 将 header 和 payload 的结果进行合并,使用HS256算法合并计算 signature = HS256(baseUrl64(header)+'.'+baseUrl(payload)+','+secretKey) idea 快捷键 https://cloud.tencent.com/developer/article/2336605 用户登录成功后,后端通过JWT机制生成一个token,返回给客户端。 客户端后续的每次请求都需要携带token,携带在 Authorization 中。 后端从authorization中拿到token后,通过 secretKey 进行解密验证身份。 ```