Java Spring Boot结合Spring Security实现简单权限控制实战
以下是一个基于Spring Boot实现简单权限控制的示例,我们会使用Spring Security框架来完成这个任务。 步骤1:创建Spring Boot项目 可以使用Spring Initializr(https://start.spring.io/)创建一个新的Spring Boot项目,添加以下依赖: - Spring Web - Spring Security 步骤2:编写实体类 创建一个简单的用户实体类 `User`。 ```java // User.java public class User { private String username; private String password; private String role; public User(String username, String password, String role) { this.username = username; this.password = password; this.role = role; } // Getters and Setters public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } } ``` 步骤3:配置Spring Security 创建一个配置类来配置Spring Security。 ```java // SecurityConfig.java 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.config.annotation.web.configuration.EnableWebSecurity; 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.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/").hasRole("ADMIN") // 只有ADMIN角色可以访问/admin路径下的接口 .antMatchers("/user/").hasAnyRole("ADMIN", "USER") // ADMIN和USER角色可以访问/user路径下的接口 .anyRequest().authenticated() // 其他请求需要认证 .and() .formLogin() .and() .httpBasic(); return http.build(); } @Bean public UserDetailsService userDetailsService() { // 创建两个用户,一个ADMIN角色,一个USER角色 UserDetails admin = User.withDefaultPasswordEncoder() .username("admin") .password("admin") .roles("ADMIN") .build(); UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("user") .roles("USER") .build(); return new InMemoryUserDetailsManager(admin, user); } } ``` 步骤4:创建控制器 创建两个控制器,分别处理不同权限的接口。 ```java // AdminController.java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AdminController { @GetMapping("/admin/hello") public String adminHello() { return "Hello, Admin!"; } } // UserController.java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/user/hello") public String userHello() { return "Hello, User!"; } } ``` 注意事项 1. 在实际应用中,不要使用 `withDefaultPasswordEncoder()` 方法,因为它使用的是明文密码编码器,不安全。建议使用 `BCryptPasswordEncoder` 进行密码加密。 2. 这里使用的是内存用户存储,实际应用中应该使用数据库来存储用户信息。 3. 对于权限的控制,可以使用更细粒度的权限管理,比如基于方法的权限控制,使用 `@PreAuthorize` 注解。 ######[AI写代码神器 | 945点数解答 | 2025-06-18 01:52:14]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)422
- IntelliJ IDEA 搭建 Spring Boot 项目:从创建到 JPA 实体类及数据源配置全攻略(讯飞星火 | 920点数解答 | 2024-10-31 15:37:22)273
- Spring Boot 与 Vue 联手:轻松实现微信扫码登录全攻略(字节豆包 | 207点数解答 | 2025-05-13 09:12:19)177
- Spring框架实战:从配置到实现,搞定员工信息查询功能(GPT | 2135点数解答 | 2024-06-12 08:32:35)323
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)324
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1201
- 超详细:使用Java 8创建连接MySQL数据库的Spring Boot项目全步骤( | 1491点数解答 | 2024-05-13 16:25:58)269
- IDEA搭建 Java 8 连接 MySQL 的 Spring Boot 项目全流程:从创建到测试( | 1985点数解答 | 2024-05-13 16:26:16)309
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)363
- 易语言编程:权限相关概念、获取方法、数据操作及管理注意事项揭秘(字节豆包 | 800点数解答 | 2026-02-10 01:27:41)54
- 深度解析:Vue + Spring Boot 组合的应用优势与发展前景(字节豆包 | 587点数解答 | 2025-04-29 16:25:49)165
- 揭秘Spring Boot + Vue3前后端分离架构:从开发到安全的全方位技术优势(DeepSeek | 2255点数解答 | 2025-05-07 18:15:21)358