Spring Boot和Spring Security——示例应用实现

关于Spring Security

Spring Security 是一个强大的访问控制框架。它有助于保护基于Spring的应用程序。

Spring Security 的特点之一是可以轻松地根据自定义要求进行扩展。例如,可以轻松更改身份验证方式或者对特定路径进行访问控制。

作为安全功能,还提供了标准的登录页面。在这里我们将确认标准的登录页面。

开发环境

前提是在下面的环境中已经成功安装了Spring Tool Suite(STS),才能创建示例应用程序。

種別プロダクトJVMJava 11OSWindows 10 64bit

创建一个样例应用程序

1. 创建新项目

image.png

在[新建 Spring Starter 项目]对话框中,输入以下内容后点击[下一步]按钮。
– 名称:spring-security1
– Java 版本:11

通过勾选以下依赖关系并点击”完成”按钮:
▼开发工具
・Spring Boot DevTools
・Lombok
▼安全性
・Spring Security
▼模板引擎
・Thymeleaf
▼Web
・Spring Web

2. 安全性的建立

在[com.example.demo]上右击 -> 选择[新建] -> [类]。
在[新建Java类]对话框中,输入以下内容,然后点击[完成]按钮。
– 包:com.example.demo.config(添加config)
– 名称:SecurityConfig

我将编辑 SecurityConfig.java ,如下所示。

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        // パスワードの暗号化用に、bcrypt(ビー・クリプト)を使用します
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 認証リクエストの設定
            .authorizeRequests()
                // 認証の必要があるように設定
                .anyRequest().authenticated()
                .and()
            // フォームベース認証の設定
            .formLogin();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            // メモリ内認証を設定
            .inMemoryAuthentication()
            // "user"を追加
            .withUser("user")
            // "password"をBCryptで暗号化
            .password(passwordEncoder().encode("password"))
             // 権限(ロール)を設定
            .authorities("ROLE_USER");
    }
}
セキュリティを設定する場合、WebSecurityConfigurerAdapter を継承してクラスを作成します。クラスには、@Configuration と @EnableWebSecurityアノテーションを付けます。
@EnableWebSecurity・・・Spring Securityの機能を有効にします。
セキュリティの設定は、configure(http)とconfigure(auth)メソッドに記載します。これらの違いは、configure(http)がhttpリクエストの設定で、configure(auth)がユーザの設定です。

创造控制器。

在[com.example.demo]中点击右键 -> 选择[新建] -> [类]。
在[新建Java类]对话框中,输入以下内容并点击[完成]按钮。
– 包:com.example.demo.controller(添加controller)
– 名称:SecurityController

我将编辑SecurityController.java文件如下。

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SecurityController {

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

4. 创建Thymeleaf模板

在[模板]上点击右键 -> 选择[新建] -> [其他]。
在[新建]对话框中,选择[Web] -> [HTML文件],然后点击[下一步]按钮。
在[新建HTML文件]对话框中,输入以下内容,然后点击[完成]按钮。
– 文件名:success.html

我将编辑 list.html 文件如下所示。

<!DOCTYPE html>
<html xmlns:th="www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <h2>ログイン成功</h2>
  <a th:href="@{/logout}">ログアウトの確認メッセージへ</a><br>
  <br>

  <form th:action="@{/logout}" method="post">
    <button>ログアウトする</button>
  </form>
</body>
</html>

在 [SpringSecurity1Application] 上按右键 -> 选择 [运行] -> 选择 [Spring Boot 应用程序]。
在控制台确认启动后,使用浏览器访问 http://localhost:8080/。

当在显示屏上输入用户名为”user”和密码为”password”时,可以登录。

参考书籍是《Spring Boot 2.3 入门: 基础到实演》(电子书),作者是原田 けいと、竹田 甘地和Robert Segawa。

广告
将在 10 秒后关闭
bannerAds