0
点赞
收藏
分享

微信扫一扫

spring boot security自动登录

Spring Boot Security自动登录

Spring Boot Security是一个用于保护应用程序的框架,提供了身份验证和授权功能。在一些场景中,我们希望用户在成功身份验证后自动登录,而无需再次输入用户名和密码。本文将介绍如何使用Spring Boot Security实现自动登录功能。

1. 添加依赖

首先,我们需要在项目的pom.xml文件中添加Spring Boot Security依赖。在<dependencies>标签内添加以下代码:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 配置Spring Security

接下来,我们需要配置Spring Security以启用自动登录功能。在项目的application.properties文件中添加以下配置:

spring.security.remember-me.key=mySecretKey

这里的mySecretKey是一个用于生成记住我令牌的密钥,可以根据实际情况进行修改。

3. 创建登录页面

在Spring Boot中,我们可以使用Thymeleaf模板引擎创建页面。创建一个名为login.html的文件,并添加以下代码:

<!DOCTYPE html>
<html xmlns:th="
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    Login
    <form action="#" th:action="@{/login}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required/><br/>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required/><br/>
        <input type="checkbox" id="remember-me" name="remember-me"/>
        <label for="remember-me">Remember me</label><br/>
        <input type="submit" value="Login"/>
    </form>
</body>
</html>

这是一个简单的登录页面,其中包含用户名、密码输入框和一个记住我复选框。

4. 创建登录控制器

接下来,我们需要创建一个登录控制器,处理用户的登录请求。创建一个名为LoginController.java的文件,并添加以下代码:

@Controller
public class LoginController {
    
    @GetMapping("/login")
    public String login() {
        return "login";
    }
    
    @PostMapping("/login")
    public String doLogin() {
        // 处理登录逻辑
        return "redirect:/home";
    }
    
    @GetMapping("/home")
    public String home() {
        return "home";
    }
}

在上面的代码中,login()方法用于返回登录页面,doLogin()方法用于处理登录请求,home()方法用于返回登录成功后的页面。

5. 创建登录成功处理器

为了实现自动登录功能,我们需要创建一个登录成功处理器。创建一个名为CustomAuthenticationSuccessHandler.java的文件,并添加以下代码:

@Component
public class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

    @Autowired
    private PersistentTokenBasedRememberMeServices rememberMeServices;

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                        Authentication authentication) throws ServletException, IOException {
        rememberMeServices.loginSuccess(request, response, authentication);
        super.onAuthenticationSuccess(request, response, authentication);
    }
}

通过继承SavedRequestAwareAuthenticationSuccessHandler类,我们可以在登录成功后执行自定义逻辑。在上面的代码中,我们调用了loginSuccess()方法来创建记住我令牌。

6. 配置自动登录

最后,我们需要在Spring Security配置类中启用自动登录功能。创建一个名为SecurityConfig.java的文件,并添加以下代码:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Autowired
    private CustomAuthenticationSuccessHandler authenticationSuccessHandler;
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .successHandler(authenticationSuccessHandler)
                .and()
            .rememberMe()
                .key("mySecretKey")
                .rememberMeServices(rememberMeServices())
                .and()
            .logout()
                .logoutSuccessUrl("/login?logout")
                .and()
            .csrf().disable();
    }
    
    @Bean
    public PersistentTokenBasedRememberMeServices rememberMe
举报

相关推荐

0 条评论