能否提供一个基于Spring框架的超市管理系统中关于角色权限代理的具体代码示例?
时间: 2024-11-06 12:16:20 浏览: 13
在Spring框架中,可以使用Spring Security库来实现角色权限管理,其中包括了基于注解的@PreAuthorize("hasRole('ROLE_ADMIN')")等来控制访问。以下是简单的角色权限代理示例代码:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true) // 开启全局的预处理和后处理安全检查
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService; // 用户服务
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests() // 配置请求授权策略
.antMatchers("/admin/**").access("@authorities.hasAnyAuthority('ADMIN', 'SALES')")
// 使用@PreAuthorize注解的方法会自动进行权限验证
.anyRequest().authenticated()
.and()
.formLogin() // 登录配置
.loginPage("/login")
.permitAll()
.defaultSuccessUrl("/")
.failureUrl("/login?error")
.and()
.logout() //登出配置
.logoutUrl("/logout")
.logoutSuccessUrl("/");
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService); // 注入用户服务来获取用户信息
}
}
// 客户端控制器示例(需要权限)
@RestController
@RequestMapping("/api/products")
public class ProductController {
@PreAuthorize("hasAuthority('PRODUCT_ACCESS')")
public List<Product> getAllProducts() {
// 实现产品列表操作...
}
}
```
在这个例子中,`ProductController`中的`getAllProducts()`方法只有拥有"PRODUCT_ACCESS"权限的用户才能访问。`UserDetailsService`用于从数据库或其他来源加载用户的详细信息,并确定他们是否有特定的角色或权限。
阅读全文