如何在Spring WebFlux中通过处理程序方法拦截请求

时间:2018-05-21 21:15:08

标签: spring spring-mvc spring-webflux

我在Spring MVC中有以下拦截器来检查用户是否可以访问处理程序方法:

@GetMapping("/foo")
@Auth(AuthType.ALLOW)
fun doesntNeedAuth(...) { ... }

@GetMapping("/bar")
@Auth(AuthType.ADMIN)
fun adminMethod(...) { ... }

在我的控制器中,我做了注释方法,如下所示:

  export class GlobalDataService {
  private reserveSource = new BehaviorSubject<any[]>([]);

  currentReserve = this.reserveSource.asObservable();

  constructor() { }

  changeReserve(reserve: any[]) {
    this.reserveSource.next(reserve)

  }
}

如果用户有令牌错误或没有权限,则返回错误 是否可以在带有注释样式控制器的Spring WebFlux中执行此操作?

1 个答案:

答案 0 :(得分:0)

要解决该问题,我很可能会使用:

  • 来自WebHandler API的Spring Reactive Web WebFilter拦截传入的请求

  • RequestMappingHandlerMapping检索处理当前请求的方法

@Autowired
RequestMappingHandlerMapping requestMappingHandlerMapping;

...
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    ...
    HandlerMethod handler = (HandlerMethod) requestMappingHandlerMapping.getHandler(exchange).toProcessor().peek();
    //your logic
}