Я являюсь bulid rest api, используя jax-rs. Для обработки аутентификации я использую Interceptor. Когда авторизация не удалось мне вернуть WebApplicationException как:jaxrs - ошибка срабатывает в статусе возврата перехватчика 500
try
{
Authentication authentication = authenticationManager
.authenticate(new UsernamePasswordAuthenticationToken(policy.getUserName(), policy.getPassword()));
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(authentication);
}
catch (AuthenticationServiceException | BadCredentialsException e)
{
throw new WebApplicationException(Response.Status.UNAUTHORIZED); //TODO set response status
}
но он возвращает startus 500 вместо 401.
Когда я бросить WebApplicationExceptions в сфере услуг это возвращающие статусы, которые я установил, но в перехватчик он не работал. Как вернуть 401 из перехватчика?
jaxrs: сервер конфигурации:
<jaxrs:server id="restService" address="/rest">
<jaxrs:serviceBeans>
<ref bean="serviceBean"/>
</jaxrs:serviceBeans>
<jaxrs:inInterceptors>
<ref bean="securityInterceptor"/>
</jaxrs:inInterceptors>
</jaxrs:server>
<bean id="serviceBean" class="some_package.CustomerService"/>
<bean id="securityInterceptor" class="some_package.AuthenticatorInterceptor"/>
Я не уверен, но, возможно, для проверки подлинности вы должны использовать фильтры вместо перехватчиков. – mkrakhin
@mkrakhin Я пробовал с фильтрами, но у меня есть jsr311-api в версии 1.1.1, это не сработало, и я не могу перейти на последнюю версию. –