首先,按照图示新建项目。


这是完成后的目录结构。

1.配置基本的 Spring Security
Spring Security 默认行为:
Spring Security 默认会为你的项目添加基础的 HTTP Basic 认证,并会自动生成一个用户和密码。
修改默认用户名和密码:
将 application.properties
文件修改为以下配置:
1 2 3 4 5 6
| spring.application.name=security-demo001
server.port=8001
spring.security.user.name=myadmin spring.security.user.password=myadmin123
|
禁用默认登录页面并自定义配置:
创建以下文件:
SecurityConfig.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| package com.laisc.securitydemo001.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain;
import static org.springframework.security.config.Customizer.withDefaults;
@Configuration public class SecurityConfig {
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
@Bean public UserDetailsService userDetailsService() { UserDetails user1 = User.withUsername("user") .password(passwordEncoder().encode("password")) .roles("USER") .build();
UserDetails admin = User.withUsername("admin") .password(passwordEncoder().encode("admin123")) .roles("ADMIN") .build();
return new InMemoryUserDetailsManager(user1, admin); }
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasRole("USER") .anyRequest().authenticated() ) .formLogin(withDefaults()) .logout(withDefaults()); return http.build(); } }
|
HomeController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package com.laisc.securitydemo001.controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;
@RestController public class HomeController {
@GetMapping("/") public String home() { return "欢迎访问首页!"; }
@GetMapping("/user") public String userPage() { return "欢迎访问用户页面!"; }
@GetMapping("/admin") public String adminPage() { return "欢迎访问管理员页面!"; } }
|
2.启动项目并测试
访问以下 URL:
http://localhost:8001/ (需要登录)
http://localhost:8001/user (需要用户权限)
http://localhost:8001/admin (需要管理员权限)
使用你在配置中设置的用户名和密码登录(如 admin/admin123)。