深入解析 Spring Security 6.4 一次性令牌登录功能,从原理到实践的最佳指南
作者:lengleng 发布日期:2025-01-31
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .requestMatchers("/login/**").permitAll() .anyRequest().authenticated() ) .oneTimeTokenLogin(oneTime -> oneTime .tokenRepository(tokenRepository()) .tokenValidityDuration(Duration.ofMinutes(5)) ); return http.build(); } @Bean public OneTimeTokenRepository tokenRepository() { return new InMemoryOneTimeTokenRepository(); } }
@Service public class OneTimeTokenService { @Autowired private OneTimeTokenRepository tokenRepository; @Autowired private EmailService emailService; public void sendLoginToken(String email) { String token = generateToken(); tokenRepository.save(new OneTimeToken(token, email)); String loginLink = "https://your-domain.com/login/verify?token=" + token; emailService.sendLoginLink(email, loginLink); } private String generateToken() { return UUID.randomUUID().toString(); } }