首页 > 其他分享 >spring boot security自动登录

spring boot security自动登录

时间:2023-07-22 16:06:07浏览次数:28  
标签:登录 创建 Security spring boot public Spring security login

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

标签:登录,创建,Security,spring,boot,public,Spring,security,login
From: https://blog.51cto.com/u_16175474/6816413

相关文章

  • spring boot Scheduled不执行
    SpringBootScheduled不执行的原因及解决办法SpringBoot是一个快速开发的框架,提供了很多方便的功能,其中之一就是定时任务。定时任务可以让开发者在指定的时间间隔或特定时间执行特定的任务。然而,有时候我们会遇到定时任务不执行的情况,本文将介绍一些常见的原因以及解决办法。......
  • spring boot @Pattern 数组字符串内
    SpringBoot@Pattern数组字符串内实现步骤简介在SpringBoot中,@Pattern注解用于验证一个字符串是否符合指定的正则表达式。本文将介绍如何使用@Pattern注解来验证数组中每个字符串内的格式是否符合要求。实现步骤步骤动作代码示例1创建一个SpringBoot项目无2......
  • spring batch 框架进行元数据管理表 mysql
    使用SpringBatch框架进行元数据管理表MySQL的实现1.简介在进行大规模数据处理时,SpringBatch框架是一个非常有用的工具。它提供了一个强大的批处理框架,可以轻松地处理大量的数据,并具备事务管理、监控、错误处理等功能。为了进行元数据管理,我们可以使用MySQL数据库来存储和管理S......
  • SpringCloud-Nacos配置中心实现原理(转)
    原文:https://blog.csdn.net/Zong_0915/article/details/113089265作者:Zong_0915 一.NacosConfig实现原理解析首先,NacosConfig针对配置的管理提供了4种操作):获取配置,从NacosConfigServer中读取配置。监听配置:订阅感兴趣的配置,当配置发生变化的时候可以收到一个事件。发布......
  • 【大联盟】20230626 集查并(dsu) 题解 AT_toyota2023spring_final_g 【Git Gud】
    【大联盟】20230626集查并(dsu)题解AT_toyota2023spring_final_g【GitGud】zyx/bx题目描述here题解由于这场出了T2、验了T3(顺序是反的),所以赛时一直在想这个题,不过很遗憾不会。相当有意思的题。考虑合并两个点\(x,y\)时,对以后产生的贡献为\(\max\{f_x,f_y\}\),\(f_x......
  • springboot三
    神器之整合通用Mapper的开发方法通用mapper的开发方法是做练习的神器,它是基于mybatis的一款MyBatis增强插件,可以提供一些常用增、删、改、查的操作,不需要重复写一些常用的sql。简化操作,精简代码,并且达到代码风格统一的目的。它的出现不是为了替代mybatis,而是让myb......
  • 【Spring】@RequestBody的实现原理
    @RequestBody注解可以用于POST请求接收请求体中的参数,使用方式如下:@ControllerpublicclassIndexController{@PostMapping(value="/submit",produces=MediaType.APPLICATION_JSON_VALUE)publicvoidsubmit(@RequestBodyUserInfouserInfo){Sy......
  • springboot二
    对springboot的一些补充在具体的应用开发中可以使用properties配置文件或者yaml配置文件两种一般建议开发中首选yml格式的文件,文件后缀可以是yml或者yaml。可以通过格式缩进的方式表达层次结构。解析yml格式的文件需要依赖snakeyaml,这个依赖由web-starter依赖引......
  • Spring Boot中内置Tomcat最大连接数、线程数与等待数 实践调优
    在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP。Tomcat服务器本身具有Web服务器的功能,可以作为独立的Web服务器来使用。一、SpringBoot应用......
  • springboot~redisson中使用lua脚本的问题
    起因事情是这样的,我在通过redission进行限流时,用到了在lua脚本里进行数值计算,而我在本地测试过程中,发现所有tonumber()方法时,返回值都是nil,这个原因最后找到了,是没有配置序列化的方式,出现错误提示如下:org.redisson.client.RedisException:ERRErrorrunningscript(calltof_......