У меня есть простой сервис «hello world» на основе Micronaut, в который встроена простая защита (для тестирования и иллюстрации безопасности Micronaut). Код контроллера в сервисе, который реализует сервис hello, представлен ниже:
@Controller("/hello")
public class HelloController
{
public HelloController()
{
// Might put some stuff in in the future
}
@Get("/")
@Produces(MediaType.TEXT_PLAIN)
public String index()
{
return("Hello to the World of Micronaut!!!");
}
}
Чтобы протестировать механизм безопасности, я следовал инструкциям руководства Micronaut и создал класс службы безопасности:
@Singleton
public class SecurityService
{
public SecurityService()
{
// Might put in some stuff in the future
}
Flowable<Boolean> checkAuthorization(HttpRequest<?> theReq)
{
Flowable<Boolean> flow = Flowable.fromCallable(()->{
System.out.println("Security Engaged!");
return(false); <== The tutorial says return true
}).subscribeOn(Schedulers.io());
return(flow);
}
}
Следует отметить, что при отклонении от учебника лямбда flowable.fromCallable () возвращает false. В учебнике он возвращает истину. Я предполагал, что проверка безопасности потерпит неудачу, если будет возвращено ложное значение, и что из-за сбоя служба приветствия не сможет ответить.
Согласно учебным пособиям, чтобы начать использовать объект Security, необходимо иметь фильтр. Фильтр, который я создал, показан ниже:
@Filter("/**")
public class HelloFilter implements HttpServerFilter
{
private final SecurityService secService;
public HelloFilter(SecurityService aSec)
{
System.out.println("Filter Created!");
secService = aSec;
}
@Override
public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> theReq, ServerFilterChain theChain)
{
System.out.println("Filtering!");
Publisher<MutableHttpResponse<?>> resp = secService.checkAuthorization(theReq)
.doOnNext(res->{
System.out.println("Responding!");
});
return(resp);
}
}
Проблема возникает, когда я запускаю микросервис и получаю доступ к URL-адресу Helo world. (http://localhost:8080/hello) Я не могу вызвать сбой доступа к службе. Фильтр перехватывает все запросы, и объект безопасности задействован, но, похоже, не препятствует доступу к службе приветствия. Я не знаю, что это требуется для сбоя доступа.
Может ли кто-нибудь помочь в этом вопросе? Спасибо.