【发布时间】:2021-06-22 18:52:57
【问题描述】:
在一切之前,我尝试了这两种解决方案,但对我不起作用
Equivalent of javax.ws.rs NameBinding in Micronaut?
https://blogs.ashrithgn.com/custom-annotation-to-handle-authorisation-in-micronaut-aop-tutorial/
在我的应用程序中,我必须在 Authorization 标头中获取一个字符串,然后从 base64 解码它,然后 json 将其转换为 POJO。当然,字符串是 jwt,我需要解码 json 的公共部分以从字段中获取数据。
从技术上讲,客户端会将标头转发给我以获取、解码并提取数据。 (这是非常糟糕的做法,但这是我必须做的)。
为此,我使用的是 micronaut 2.4.1,这是我的代码:
拦截器:
public class HeadInterceptor implements MethodInterceptor<Object, Object> {
@SneakyThrows
@Override
public Object intercept(MethodInvocationContext<Object, Object> context) {
Request request = (Request) context.getParameterValueMap().get("request");
// Where do i get Authorization header?
// i.e String token = (String) context.getParameterValueMap().get("Authorization");
String token = "eyJhdWQiOiJ0ZXN0IiwiaXNzIjoidGVzdCIsInN1YiI6InRlc3QiLCJleHAiOjExMTExMTEsImlhdCI6MTExMTExMTEsImRhdGEiOiJ0ZXN0In0=";
ObjectMapper mapper = new ObjectMapper();
Info info = mapper.readValue(new String(Base64.getDecoder().decode(token)), Info.class);
request.setData(info.getSub().toUpperCase());
return context.proceed();
}
}
控制器:
@Controller("/main")
public class MainController {
@Post
@Head
public Single<Response> index(@Body @Valid Request request) {
return Single.just(
Response.builder()
.message(String.format("%s-%s", request.getData(), request.getInfo()))
.build()
);
}
}
这是一个示例应用程序https://github.com/j1cs/micronaut-jacksonxml-error
(忽略名称用于其他问题)
【问题讨论】: