酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

帮我基于spring boot写一个权限 语言方向:Java

以下是一个基于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` 注解。 [2025-06-18 01:52:14 | AI写代码神器 | 945点数解答]

相关提问