详解Spring Security的formLogin登录认证模式

详解Spring Security的formLogin登录认证模式

概述

在使用Spring Security开发Web应用的过程中,我们通常需要用户进行身份验证和授权,而Spring Security的formLogin登录认证模式就是其中一种。formLogin认证模式是指用户将会通过一个用户名和密码的表单来进行身份验证。这个过程中,用户在浏览器中访问了一个需要身份验证的页面,但是他们还没有登陆,于是Spring Security自动跳转到一个默认的登录页面(也可以自定义登录页面),并且在用户输入用户名和密码之后进行身份验证。如果验证成功,用户可以访问需要权限的资源,否则将被重定向到错误页面。

使用步骤

下面将会介绍使用formLogin登录认证模式的步骤:

引入Spring Security依赖

在项目的依赖中加入Spring Security的依赖:

<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-web</artifactId>
  <version>5.3.2.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-config</artifactId>
  <version>5.3.2.RELEASE</version>
</dependency>

配置Spring Security

在Spring Security的配置文件中,需要做如下配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private DataSource dataSource;

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
        .antMatchers("/", "/home").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin()
          .loginPage("/login")
          .defaultSuccessUrl("/home")
          .permitAll()
        .and()
        .logout()
          .logoutUrl("/logout")
          .logoutSuccessUrl("/login?logout")
          .invalidateHttpSession(true)
          .permitAll();
  }

  @Override
  public void configure(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=?");
  }
}

在上面的配置中,我们定义了需要进行身份验证和授权的页面以及用户的角色和权限。

创建自定义登录页面

如果需要提供一个个性化的登录页面,可以按照如下步骤进行设置:

在Controller中添加以下代码:

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

在resources/templates目录下新建login.html页面,添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
</head>
<body>
<h2>Login Page</h2>
<form action="/login" method="post">
    <p>
        <label>Username:</label>
        <input type="text" name="username"/>
    </p>

    <p>
        <label>Password:</label>
        <input type="password" name="password"/>
    </p>

    <button type="submit">Login</button>
</form>
</body>
</html>

添加用户信息到数据库

首先需要新建两张表,分别保存用户和权限信息:

CREATE TABLE users (
    username varchar(50) not null primary key,
    password varchar(100) not null,
    enabled boolean not null
);

CREATE TABLE authorities (
    username varchar(50) not null,
    authority varchar(50) not null,
    foreign key (username) references users (username)
);

然后插入相应的用户和权限信息:

INSERT INTO users (username,password,enabled) values ('admin','$2a$10$wZRpm94xxWOxJfzy9vwrFOfSdeaoFPAZS9PL.GPEa/gELrOHBzHYW',true);
INSERT INTO USERS (username,password,enabled) values ('user','$2a$10$6tjRQ5tDnoR1ITHcu9l8g.8Ea56F.o7WT.VoieL9D8FiL1S/bajli',true);
INSERT INTO authorities (username,authority) values ('admin','ROLE_ADMIN');
INSERT INTO authorities (username,authority) values ('user','ROLE_USER');
INSERT INTO authorities (username,authority) values ('admin','ROLE_USER');

其中的密码都是使用BCrypt加密,可以使用BCryptPasswordEncoder进行加密。

这里给出的密码是:

admin -> admin

user -> user

运行示例

この操作在示例中运行,构建了一个使用Spring Security formLogin模式进行身份验证的Web应用。其中包含了两张表,一张保存用户信息,一张保存权限信息。每个用户都可以分配多个权限,不同的用户可以访问不同的页面。简单起见,该示例中没有涉及到使用HTTPS。

1. Build and Run

首先,使用下面的命令编译并运行示例:

mvn clean package spring-boot:run

运行成功后,可以通过浏览器访问(http://localhost:8080/)。

2. Login

客户端可以在生成的登陆页面,通过使用上面提到的用户名和密码进行登陆。(管理员用户:admin / admin;普通用户:user / user)。

3. Access

成功登陆之后,我们就能够在不同的URL中对其进行相应的测试:

http://localhost:8080/home

总结

上述是使用Spring Security的formLogin登录认证模式的详细介绍。通过正确使用此模式,我们可以轻松地向我们的Web应用程序添加身份验证和授权用户的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring Security的formLogin登录认证模式 - Python技术站

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

相关文章

  • 手把手带你入门 Spring Security的具体流程

    下面我将详细讲解“手把手带你入门 Spring Security的具体流程”的攻略,包含以下几个步骤: 步骤一:添加依赖 首先,在pom.xml文件中添加Spring Security的依赖,如下所示: <dependency> <groupId>org.springframework.security</groupId>…

    Java 2023年5月20日
    00
  • Spring Data JPA 设置字段默认值方式

    当使用Spring Data JPA进行持久化操作时,我们可能需要为实体中的字段设置默认值。下面是设置字段默认值的几种方式。 1. 在实体中使用变量初始化 在Java语言中,我们有一个非常方便的初始化变量的方式,即在变量声明的同时初始化它们。Spring Data JPA可以通过这种方式为实体字段设置默认值。示例如下: @Entity public clas…

    Java 2023年6月3日
    00
  • java 语句块的使用详解及实例

    Java语句块的使用详解及实例 在Java中,语句块是一段包含多个语句的代码块,可以在其中定义新的变量和方法,这些变量和方法只在当前语句块内有效。本文将详细讲解Java语句块的使用及实例。 1. 什么是Java语句块? Java语句块是Java程序中的一种结构,用于组织和分类代码,Java中有四种类型的语句块: 普通代码块(即局部代码块):一般用来限定变量的…

    Java 2023年5月20日
    00
  • Java Mybatis架构设计深入了解

    Java Mybatis架构设计深入了解 介绍 MyBatis是一种优秀的基于Java的ORM(对象关系映射)框架,具有易于使用、灵活性和高效性等优点。在Java开发中,MyBatis取代了早期的JDBC编程方式,为Java开发者提供了一个更加优雅的解决ORM的方式。 在使用MyBatis时,你需要了解它的架构设计,以便更好地使用和优化你的代码。 MyBat…

    Java 2023年5月20日
    00
  • Springboot 使用内置tomcat禁止不安全HTTP的方法

    下面是详细的讲解“Spring Boot使用内置Tomcat禁止不安全HTTP的方法”的攻略: 1. 概述 Spring Boot本身就可以使用内置Tomcat服务器来快速构建Web应用程序。默认情况下,Tomcat服务器可以同时支持HTTP和HTTPS两种协议,但是其中HTTP协议是不安全的。为了保证应用程序的安全性,我们需要禁止使用不安全的HTTP协议,…

    Java 2023年5月20日
    00
  • Win10系统下配置java环境变量的全过程

    下面是Win10系统下配置java环境变量的全过程: 下载JDK安装包 在Oracle官网上下载自己所需的JDK安装包,下载地址:https://www.oracle.com/java/technologies/javase-jdk15-downloads.html 安装JDK 运行JDK安装包,按照默认设置一路下一步,最后点击“完成”即可。 查看Java安…

    Java 2023年5月24日
    00
  • SpringMVC前端和后端数据交互总结

    下面是关于“SpringMVC前端和后端数据交互总结”的攻略: 攻略 1. 前端和后端数据交互方式 在SpringMVC中,前端和后端数据交互一般有两种方式:表单提交和AJAX请求。 1.1 表单提交 表单提交是一种比较常见的方式。前端页面通过form表单向后端发送请求,后端接收到请求后会对表单数据进行处理,然后将处理后的结果返回给前端。 以下是一个简单的表…

    Java 2023年5月16日
    00
  • 详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

    详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化 Tomcat配置 1.引入Tomcat依赖 在项目的pom.xml文件中引入以下Tomcat依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId…

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