# form_token **Repository Path**: vmto/form_token ## Basic Information - **Project Name**: form_token - **Description**: 在Spring Security中,配置多个过滤链(FilterChain)可以实现一个应用同时包含REST API和Web UI。 使用 UsernamePasswordAuthenticationToken 来封装用户的认证信息,并手动触发认证流程,在自定义登录逻辑时很有用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-10-29 - **Last Updated**: 2025-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: Security ## README # 页面会话和接口令牌双登录 > 在`Spring Security`中,配置多个过滤链(FilterChain)可以满足复杂的应用需求,例如在一个应用中同时包含REST API和Web UI,它们可能需要不同的安全配置。 ### 版本依赖 首先,确保你已经安装了 Maven,然后创建一个新的 Spring Boot 项目。我选择用 `idea` 编辑器来生成项目骨架,以下是依赖版本: - spring-boot 2.7.6 - spring-security 5.7 - spring-web 5.7 - freemarker 2.3 ### 基本步骤 - 配置 Spring Security:首先,你需要配置 Spring Security 以允许自定义的认证逻辑。这通常意味着你需要配置一个 AuthenticationManager。 - 创建自定义登录方法:创建一个控制器或服务方法,该方法接收登录凭据(用户名和密码),使用 UsernamePasswordAuthenticationToken 封装它们,并通过 AuthenticationManager 进行认证。 - 处理认证结果:你需要处理认证结果。如果认证成功,你可以创建一个新的 SecurityContext 并将其设置到当前线程中。如果认证失败,你需要处理相应的异常并返回适当的错误信息。 ### 自定义登录 > 在 Spring Security 5.7 中,使用 UsernamePasswordAuthenticationToken 来封装用户的认证信息,并手动触发认证流程。这通常在你需要自定义登录逻辑时非常有用,比如从非标准的登录表单、REST API 或其他来源获取认证信息时。 - 注入 `AuthenticationManager`,这是 `Spring Security` 提供的用于处理认证的组件。 - 在 `/auth/login` 方法中,我们创建了一个 `UsernamePasswordAuthenticationToken`,并通过 `authenticationManager.authenticate` 方法进行认证。 - 如果认证成功,我们将认证结果设置到 `SecurityContextHolder` 中,这样 `Spring Security` 就可以在后续请求中识别出已认证的用户。 - 如果认证失败,我们捕获 `AuthenticationException` 并返回错误信息。 - 在 `/auth/logout` 方法中,我们清除了 `SecurityContextHolder` 中的认证信息,在实际应用中还需要执行其他注销逻辑。