У меня есть пакет OSGi, который использует JAX-RS для обработки некоторых служб REST. Этот пакет работает в Карафе с Apache CXF. Мне нужно применить базовую HTTP-аутентификацию к определенным комбинациям пути / метода. Я возился с Spring Security, и похоже, что новая версия 3.1 позволяет вам делать именно это, однако у меня было много проблем с тем, чтобы заставить его работать в OSGi.
Просто в качестве теста я создал очень простой файл beans.xml :
А теперь самое интересное ... Судя по всему, что я читал, мне нужен web.xml , чтобы все это работало. Например, этот образец, который я пытался использовать:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
Использование комбинации этих двух файлов не помогло. И под «не сработало» я имею в виду, что ничего не произошло. Никаких сообщений об ошибках, никаких исключений, пакет работал так же, как до того, как я попытался добавить Spring Security. Я предполагаю, что проблема в том, что пакет должен быть WAR или WAB для загрузки web.xml. Это правильно?
И что еще более важно, есть ли способ заставить Spring работать без файла web.xml?
Я исхожу из предположения, что мне нужно сохранить пакет как пакет для CXF, чтобы загрузить его, поэтому я не могу преобразовать его в WAR или WAB, но я не совсем уверен, что это так.
Спасибо за любую помощь, которую вы можете предоставить!
ОБНОВЛЕНИЕ:
После нескольких дополнительных поисков в Google я нашел сообщение на форуме , в котором упоминалось о добавлении Web-FilterMappings: springSecurityFilterChain; url-patterns: = "/ *"
в ваш манифест вместо использования web.xml. Однако по-прежнему кажется, что вам нужно использовать WAB вместо обычного пакета. Я добавил строку в свой манифест на всякий случай, но это не действует. Похоже, мой вопрос превращается в: Как мне использовать WAB с CXF?
ОБНОВЛЕНИЕ 2: Поскольку этот вопрос недостаточно длинный ... Я решил попробовать использовать аннотации Spring Security вместо URL-адреса перехвата, чтобы посмотреть, что произойдет. Когда я пытаюсь перейти по защищенному пути, я получаю забавную трассировку стека:
Caused by: org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:323)
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:196)
at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:59)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[46:org.springframework.aop:3.0.5.RELEASE]
На веб-сайте Spring говорится, что это происходит при первой попытке анонимного подключения к защищенной службе и не произойдет во второй раз. Что ж, со мной это происходит каждый раз. За исключением,похоже, что моя запись в манифесте - это , и, возможно, проблема в другом, чем я думал. У кого-нибудь есть мысли о том, почему это происходит? Мне не хватает какой-то записи в beans.xml, чтобы базовая HTTP-аутентификация работала?