✨ 使用自定义授权管理器
This commit is contained in:
parent
24caac4b00
commit
b11ce877be
|
@ -1238,3 +1238,23 @@ public Result<String> lowerUser(String name) {
|
|||
}
|
||||
```
|
||||
|
||||
## 使用自定义授权管理器
|
||||
|
||||
## 将方法与自定义切入点相匹配
|
||||
|
||||
由于是基于 Spring AOP 构建的,您可以声明与注解无关的模式,类似于请求级别的授权。 这具有将方法级别的授权规则集中化的潜在优势。
|
||||
|
||||
例如,可以发布自己的 `Advisor` 或使用 `<protect-pointcut>` 将 AOP 表达式与服务层的授权规则相匹配,如下所示:
|
||||
|
||||
```java
|
||||
import static org.springframework.security.authorization.AuthorityAuthorizationManager.hasRole
|
||||
|
||||
@Bean
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
static Advisor protectServicePointcut() {
|
||||
AspectJExpressionPointcut pattern = new AspectJExpressionPointcut()
|
||||
pattern.setExpression("execution(* com.mycompany.*Service.*(..))")
|
||||
return new AuthorizationManagerBeforeMethodInterceptor(pattern, hasRole("USER"))
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package com.spring.step2.security.manger;
|
||||
|
||||
import org.aopalliance.intercept.MethodInvocation;
|
||||
import org.springframework.security.authorization.AuthorizationDecision;
|
||||
import org.springframework.security.authorization.AuthorizationManager;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 处理方法调用前的授权检查
|
||||
* check()方法接收的是MethodInvocation对象,包含即将执行的方法调用信息
|
||||
* 用于决定是否允许执行某个方法
|
||||
* 这是传统的"前置授权"模式
|
||||
*/
|
||||
@Component
|
||||
public class MyAuthorizationManager implements AuthorizationManager<MethodInvocation> {
|
||||
@Override
|
||||
public AuthorizationDecision check(Supplier<Authentication> authentication, MethodInvocation invocation) {
|
||||
return new AuthorizationDecision(true);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.spring.step2.security.manger;
|
||||
|
||||
import org.springframework.security.authorization.AuthorizationDecision;
|
||||
import org.springframework.security.authorization.AuthorizationManager;
|
||||
import org.springframework.security.authorization.method.MethodInvocationResult;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 处理方法调用后的授权检查
|
||||
* check()方法接收的是MethodInvocationResult对象,包含已执行方法的结果
|
||||
* 用于决定是否允许返回某个方法的结果(后置过滤)
|
||||
* 这是Spring Security较新的"后置授权"功能
|
||||
*/
|
||||
@Component
|
||||
public class PostAuthorizationManager implements AuthorizationManager<MethodInvocationResult> {
|
||||
|
||||
@Override
|
||||
public AuthorizationDecision check(Supplier<Authentication> authentication, MethodInvocationResult invocation) {
|
||||
return new AuthorizationDecision(true);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue