首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Micronaut中的javax.ws.rs NameBinding?

相当于Micronaut中的javax.ws.rs NameBinding?
EN

Stack Overflow用户
提问于 2020-09-11 12:42:45
回答 1查看 149关注 0票数 1

我正在将一个旧的超文本传输协议服务器移植到Micronaut,并且我被卡住了,试图将一个使用javax.ws.rs NameBinding注释的授权过滤器移植到一个Micronaut HTTP服务器过滤器。我的90%的端点/控制器使用我拥有的NameBinding注释,因此使用标准的Micronaut HTTP服务器筛选器将很困难。

一个臭气熏天的代码是创建一个接受所有api端点的过滤器(即.@Filter("/**")),然后可能存储所有不需要授权的路径的列表,并将其与请求的路径进行比较。

我尝试的另一个技巧是尝试通过请求/链派生带有反射的目标方法,但目标方法似乎保存在一个@Internal类中,这让我相信我不应该从过滤器中反射该方法。如果我能够从过滤器中反映目标方法,我就可以查找我的旧注释并对其进行过滤。

一般来说,是否有任何指导原则来为除少数控制器/方法之外的大量控制器/方法提供过滤器,例如反向过滤器模式(尽管这也不是理想的)?

在micronaut中有没有办法手动控制过滤器的注入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-13 23:52:06

如果您需要对端点进行细粒度控制,我将使用micronaut AOP

代码语言:javascript
复制
@Documented
@Retention(RUNTIME)
@Target(ElementType.METHOD)
@Around
@Type(AuthenticatedInterceptor.class)
public @interface Authenticated {
}

以及拦截器的响应

代码语言:javascript
复制
@Singleton
public class AuthenticatedInterceptor implements MethodInterceptor<Object, Object> {

    @Override
    public Object intercept(MethodInvocationContext<Object, Object> context) {
        final var authHeader = ServerRequestContext.currentRequest()
                .map(HttpMessage::getHeaders)
                .flatMap(HttpHeaders::getAuthorization)
                .orElseThrow(() -> new RuntimeException("no header"));

        validate(authHeader);

        return context.proceed();
    }
}

然后,您必须在每个需要进行身份验证的方法上添加@Authenticated

更新

Micronaut安全提供了它的own @Secured注释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63840896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档