Как заменить org.jboss.resteasy.core.ResourceMethodInvoker на классы Spring или POJO - PullRequest
0 голосов
/ 20 июня 2020

У нас есть приложение, разработанное много лет назад с использованием RESTEasy. Реализация использует фильтры RestEasy, реализация очень близка к показанному здесь коду: RESTEasy ContainerRequestFilter - пример фильтра безопасности RESTEasy Я переношу это приложение на Spring Boot, как и все другие приложения, разработанные с использованием Spring Boot. Я конвертирую код, удаляя JAX-RS и RESTEasy и заменяя фильтр RESTEasy на Spring Filter чем-то похожим на код, показанный здесь: Как определить фильтр загрузки Spring? У меня есть код в текущем реализация, которая проверяет аннотацию для метода, как показано ниже:

ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
Method method = methodInvoker.getMethod();
if(!method.isAnnotationPresent(PermitAll.class))
{
    doSomething();
}

Я ищу способ реализовать тот же метод проверки logi c с использованием POJO или Spring, который я, похоже, не нашел до сих пор . Любая помощь будет принята с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 06 июля 2020

В весенних ботинках вы можете использовать Interceptor. В перехватчике у вас будет доступ к HnadlerMethod, из которого вы можете узнать, какой метод службы вызывается и в каком ресурсе, и вы можете получить аннотацию погоды, присутствующую или нет.

Шаги: создайте перехватчик обработчика и зарегистрируйте его в контексте Spring, чтобы он был вызван. После вызова фильтра вызывается обработчик-перехватчик. Это похоже на то, что в остальном easy containerRequestFilter. Также, javax.servlet.Filter вызывается перед containerFilter, и здесь тоже.

Ссылка: https://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html `

@Configuration
public class HandlerIntercepter extends HandlerInterceptorAdapter
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler) throws Exception
{
    System.out.println("handler called");
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    Class<?> clazz = handlerMethod.getBeanType();
    Method m = handlerMethod.getMethod();
    if (clazz != null)
    {
        boolean isClzAnnotation = 
clazz.isAnnotationPresent(RequireSignInClassLevel.class);
    }
    if (m != null)
    {
        boolean isMethondAnnotation = 
m.isAnnotationPresent(RequireSignIn.class);
    }
    return true;
}}
@Component
public class AppConfig extends WebMvcConfigurerAdapter
{
@Autowired
HandlerIntercepter HandlerIntercepter;

@Override
public void addInterceptors(InterceptorRegistry registry)
{
    registry.addInterceptor(HandlerIntercepter);
}
}`
...