Spring Boot和Spring Security——示例应用实现
关于Spring Security
Spring Security 是一个强大的访问控制框架。它有助于保护基于Spring的应用程序。
Spring Security 的特点之一是可以轻松地根据自定义要求进行扩展。例如,可以轻松更改身份验证方式或者对特定路径进行访问控制。
作为安全功能,还提供了标准的登录页面。在这里我们将确认标准的登录页面。
开发环境
前提是在下面的环境中已经成功安装了Spring Tool Suite(STS),才能创建示例应用程序。
创建一个样例应用程序
1. 创建新项目
在[新建 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。