那么在接口中上面这段代码如何实现权限控制
时间: 2024-03-01 11:52:16 浏览: 51
原创layui与thinkphp最细级别权限控制后台,通过读取代码注释来实现权限控制
5星 · 资源好评率100%
在接口中实现权限控制的方式与在 Spring Security 配置类中配置访问控制规则类似,只不过是通过注解的方式实现。
以 Spring Boot 为例,可以通过在控制器方法上添加 @PreAuthorize 或 @Secured 注解来控制方法的访问权限。
例如,如果想要控制一个方法只有 ADMIN 角色的用户才能访问,可以在该方法上添加 @PreAuthorize("hasRole('ADMIN')") 注解,示例代码如下:
```java
@RestController
@RequestMapping("/api")
public class ApiController {
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin")
public String adminOnly() {
return "Hello, admin!";
}
@PreAuthorize("hasRole('USER')")
@GetMapping("/user")
public String userOnly() {
return "Hello, user!";
}
}
```
在上面的代码中,我们使用 @PreAuthorize 注解来控制方法的访问权限,其中参数 "hasRole('ADMIN')" 表示只有 ADMIN 角色的用户才能访问该方法。
需要注意的是,为了使 @PreAuthorize 注解生效,需要在 Spring Security 配置类中启用方法级别的权限控制,示例代码如下:
```java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 配置省略...
}
```
在上面的代码中,我们使用 @EnableGlobalMethodSecurity 注解来启用方法级别的权限控制,参数 prePostEnabled = true 表示开启 @PreAuthorize 和 @PostAuthorize 注解的支持。
除了使用 @PreAuthorize 注解外,还可以使用 @Secured 注解来控制方法的访问权限,示例代码如下:
```java
@RestController
@RequestMapping("/api")
public class ApiController {
@Secured("ROLE_ADMIN")
@GetMapping("/admin")
public String adminOnly() {
return "Hello, admin!";
}
@Secured("ROLE_USER")
@GetMapping("/user")
public String userOnly() {
return "Hello, user!";
}
}
```
在上面的代码中,我们使用 @Secured 注解来控制方法的访问权限,其中参数 "ROLE_ADMIN" 和 "ROLE_USER" 表示 ADMIN 和 USER 两个角色,只有对应角色的用户才能访问对应方法。
需要注意的是,为了使 @Secured 注解生效,需要在 Spring Security 配置类中启用注解驱动的方法安全性,示例代码如下:
```java
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 配置省略...
}
```
阅读全文