被标记为 @PreAuthorize走哪个类
时间: 2023-08-19 09:05:09 浏览: 90
被标记为 `@PreAuthorize` 的方法会在进入目标方法之前由 Spring Security 进行权限验证。具体而言,这个注解通常与 Spring Security 的方法级别权限控制相关的类一起使用。
该注解可以用于控制方法的访问权限,用法如下:
```java
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void someSecuredMethod() {
// ...
}
```
在上述示例中,`@PreAuthorize` 注解指定了一个 SpEL 表达式 `"hasRole('ROLE_ADMIN')"`,表示只有拥有 "ROLE_ADMIN" 角色的用户才能访问 `someSecuredMethod()` 方法。
Spring Security 在运行时会解析和执行这个注解,并根据 SpEL 表达式的结果判断是否允许访问目标方法。如果验证失败,将抛出异常并阻止进一步的方法执行。
要生效 `@PreAuthorize` 注解,需要配置适当的 Spring Security 配置类,其中包括启用方法级别的安全性控制。通常情况下,可以通过继承 `WebSecurityConfigurerAdapter` 类来实现自定义的 Spring Security 配置。
示例代码:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().permitAll()
.and()
.formLogin();
}
}
```
在上述示例中,我们配置了一个 `SecurityConfig` 类,继承自 `WebSecurityConfigurerAdapter`,并重写了 `configure()` 方法来定义权限规则。这个配置类将 URL "/admin/**" 设置为需要 "ADMIN" 角色才能访问,其他 URL 则允许所有用户访问。
需要注意,`@PreAuthorize` 注解是 Spring Security 提供的,而不是 Spring Framework 提供的。它与 Spring Security 的权限控制相关的类一起使用,以实现细粒度的方法级别的安全性控制。
阅读全文