Spring Security学习之rememberMe自动登录的实现

下面我会给出详细的攻略,分为以下步骤:

  1. 添加pom依赖
  2. 配置Remember-me
  3. 编写HTML页面
  4. 编写Controller
  5. 运行测试

下面我会对每个步骤进行详细的讲解:

1. 添加pom依赖

在pom.xml中添加Spring Security和Spring Web的依赖。示例pom.xml文件如下:

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

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

2. 配置Remember-me

在Spring Security的配置类中添加Remember-me的配置,示例代码如下:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/home")
                .and()
            .rememberMe()
                .tokenRepository(persistentTokenRepository())
                .tokenValiditySeconds(3600)
                .rememberMeParameter("remember-me")
                .and()
            .logout()
                .logoutSuccessUrl("/login");
    }

    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
        tokenRepository.setDataSource(dataSource);
        return tokenRepository;
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery("select username, password, enabled from users where username=?")
            .authoritiesByUsernameQuery("select username, authority from authorities where username=?")
            .passwordEncoder(new BCryptPasswordEncoder());
    }
}

注意这里需要注入一个DataSource,这里的实现使用的是Spring Boot默认自带的H2数据库。使用JdbcTokenRepositoryImpl来保存Remember-me的持久化信息。

3. 编写HTML页面

在登录页面中添加Remember-me的勾选框,示例代码如下:

<form method="post" th:action="@{/login}" id="login-form">
    <div th:if="${param.error}" class="alert alert-danger alert-dismissible">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        用户名或密码不正确
    </div>

    <div th:if="${param.logout}" class="alert alert-info alert-dismissible">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        已成功退出登录
    </div>

    <h2 class="form-signin-heading">登录</h2>

    <label for="inputUsername" class="sr-only">用户名</label>
    <input type="text" id="inputUsername" name="username" class="form-control" placeholder="用户名" required autofocus>

    <label for="inputPassword" class="sr-only">密码</label>
    <input type="password" id="inputPassword" name="password" class="form-control" placeholder="密码" required>

    <div class="checkbox">
        <label>
            <input type="checkbox" name="remember-me" value="true"> 自动登录
        </label>
    </div>

    <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
</form>

4. 编写Controller

编写SimpleController,其中包含/login和/home两个方法。

@Controller
public class SimpleController {

    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleController.class);

    @RequestMapping("/login")
    public String login() {
        return "login";
    }

    @RequestMapping("/home")
    public String home() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        LOGGER.info("当前登录用户名:{}", auth.getName());
        return "home";
    }
}

5. 运行测试

启动Spring Boot应用,在浏览器中访问http://localhost:8080/login,输入用户名和密码,勾选记住我,点击登录按钮。登录成功后跳转到http://localhost:8080/home,并输出当前登录的用户名。

再次打开浏览器,访问http://localhost:8080/home,会自动登录。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Security学习之rememberMe自动登录的实现 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringMVC的简单传值(实现代码)

    下面是关于“SpringMVC的简单传值(实现代码)”的攻略,包含了示例说明。 一、简介 SpringMVC是一种基于MVC(Model-View-Controller)的Web框架,我们可以使用它来开发Java Web应用程序。SpringMVC有很多特性,其中之一就是通过控制器将数据从视图传递到模型,从而实现传值的功能。 在SpringMVC中,我们可以…

    Java 2023年6月15日
    00
  • java开发只要tomcat设计模式用的好下班就能早

    Java开发只要Tomcat设计模式用的好下班就能早,这句话的含义是,如果在Java Web项目的开发中,我们能够使用适当的Tomcat设计模式,能够显著的提高开发效率,而且在上线后也能够减少服务器资源的使用,从而让我们能够更早地下班,实现工作和生活的平衡。 以下是两条具体的示例说明: 使用Tomcat连接池 连接池技术可以显著提高Web项目的性能,并且能够…

    Java 2023年6月2日
    00
  • springboot 使用Spring Boot Actuator监控应用小结

    下面是对“springboot使用SpringBootActuator监控应用小结”的详细讲解,包含完整的攻略和示例。 1. 什么是SpringBootActuator SpringBootActuator是SpringBoot框架下的一个辅助工具,可以帮助开发者更好的管理和监控应用程序的运行情况。通过向应用程序的运行时环境中添加各种监控指标,开发者可以实时…

    Java 2023年5月15日
    00
  • JavaEE微框架Spring Boot深入解读

    JavaEE微框架SpringBoot深入解读 简介 Spring Boot是一个基于Spring框架的快速应用开发框架,它简化了Spring应用的开发过程,使用起来非常方便,而且能够快速地搭建一个可用的、生产级别的应用程序。 Spring Boot的核心特性 自动配置 在Spring Boot的自动配置下,开发者不需要再手动地为每一个框架、类库引入一个配置…

    Java 2023年5月15日
    00
  • SpringMVC集成FastJson使用流程详解

    SpringMVC集成FastJson使用流程详解 FastJson是阿里巴巴开源的一个JSON解析库,它可以将Java对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为Java对象。在SpringMVC中,我们可以使用FastJson来处理JSON格式的数据。本文将详细讲解SpringMVC集成FastJson的使用流程,并提供两个示例说明…

    Java 2023年5月17日
    00
  • java通过JFrame做一个登录系统的界面完整代码示例

    下面我将为你详细讲解如何使用Java通过JFrame做一个登录系统的界面。 前提准备 在开始编写代码之前,我们需要先确保已经安装好了Java开发环境,推荐使用Eclipse开发工具。 第一步:搭建界面 在Java中,JFrame是我们常用的界面设计类。我们首先需要实例化一个JFrame类,并为其设置一些基本的属性,比如窗口大小、标题等。示例如下: impor…

    Java 2023年5月24日
    00
  • 使用springMVC所需要的pom配置

    以下是关于“使用SpringMVC所需要的POM配置”的完整攻略,其中包含两个示例。 使用SpringMVC所需要的POM配置 SpringMVC是一种基于Java的Web框架,它可以帮助我们快速地开发Web应用程序。在使用SpringMVC时,我们需要在项目中添加一些依赖库。本文将讲解使用SpringMVC所需要的POM配置。 添加SpringMVC依赖 …

    Java 2023年5月17日
    00
  • Spring系列中的beanFactory与ApplicationContext

    当提到Spring框架的IoC容器时,很容易想到beanFactory和ApplicationContext,这两者都属于Spring框架中IoC容器的范畴。本篇文章将详细讲解beanFactory和ApplicationContext的特点,优缺点以及使用场景。 BeanFactory BeanFactory是Spring框架最基本的IoC容器,提供了一种…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部