В настоящее время я разрабатываю приложение с использованием JAX-RS для Джерси в качестве backend и AngularJS в качестве интерфейса; Мне нужна аутентификация, и поэтому с каждым запросом я посылаю токен, который должен проверяться с помощью бэкэнд. Для этого я решил создать фильтр Джерси, который будет искать этот токен, а затем вызвать мой AuthenticateService, чтобы проверить, может ли пользователь быть аутентифицирован. После этого авторизация управляется аннотацией @RolesAllowed
.Inject EJB in Jersey фильтр
Вот моя проблема: я не могу привнести в EJB внутри Джерси фильтра, strangly, потому что он прекрасно работает с ресурсами .. Но с фильтром, служба всегда остается нулевой
Любая идея, как обмануть его? Благодаря код
Фильтр:
@Provider
@Priority(Priorities.AUTHORIZATION)
public class AuthenticationFilter implements ContainerRequestFilter {
@EJB(name=AuthenticationService.LOOKUP_NAME)
private AuthenticationService authService;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
/**
* Get headers parameters
*/
String userIdStr = requestContext.getHeaderString(SecurityConsts.HEADER_ID_PARAMETER);
int userId = 0;
if(userIdStr != null && !userIdStr.isEmpty()) {
userId = Integer.parseInt(userIdStr);
}
String securityToken = requestContext.getHeaderString(SecurityConsts.HEADER_TOKEN);
User user = null;
/**
* If a token is present, try to authenticate the user
*/
if(securityToken != null && !securityToken.isEmpty()) {
// NullPointerException happens here
user = authService.authenticateWithToken(userId, securityToken);
}
/**
* Set correct security context
*/
requestContext.setSecurityContext(new ConfiguratorSecurityContext(user));
}
}
Трюк с 'InitialContext' решить мою проблему, спасибо! –