powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache CXF + Spring Security
10 сообщений из 10, страница 1 из 1
Apache CXF + Spring Security
    #39796022
Kriptman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь переехать на java, делаю нубский пет-проект. И что-то застопорился на, казалось бы, простом вопросе. Есть soap приложение на apache cxf, авторизацию делаю через заголовки в xml. Хочу прикрутить к этому делу спринговую секьюрити дабы юзать аннотации @RolesAllowed на методах. Но каменный цветок не выходит совершенно.

Настройки эндпоинта:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
endpoint.getInInterceptors().add(new SAAJInInterceptor());
Map<String, Object> props = new HashMap<>();
props.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
props.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
endpoint.getInInterceptors().add(new WSS4JInInterceptor(props));

endpoint.getProperties().put("ws-security.validate.token", false);
endpoint.getProperties().put("ws-security.ut.no-callbacks", true);
endpoint.getProperties().put("ws-security.ut.validator", CredentialValidator.class.getName());


Была попытка сделать это через колбэк, но там пароль не достать, да и не решает это проблемы.

Валидатор:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Service
public class CredentialValidator extends UsernameTokenValidator {
    @Override
    public Credential validate(Credential credential, RequestData data) throws WSSecurityException {
	String userName = credential.getUsernametoken().getName();
        String password = credential.getUsernametoken().getPassword();

	List<GrantedAuthority> authorities = new ArrayList<>();
	authorities.add(new SimpleGrantedAuthority(Role.USER_ROLE));

	PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken(userName, password, authorities);
        SecurityContextHolder.getContext().setAuthentication(token);
    }   
}


Тут есть всё, чтобы руками разруливать права и т.д., но хочется заюзать всё-таки спринг и удобные аннотации из коробки.

Конфигурация спринг секьюрити:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers(HttpMethod.POST, "/services/**").permitAll()
        ;
    }
}


Добавление или удаление inMemoryAuthentication ничего не меняет, так что пропустил.

Аннотации вида @RolesAllowed(Role.USER_ROLE) юзаю на методах класса обозначенного как @WebService.

Если вместо permitAll поставить authenticated, то до валидатора даже не доходит, доступ рубит раньше. Я понимаю, что либо настроил что-то не так, либо надо действовать совершенно по другому. Но как-то не додумаюсь куда гуглить, может кто-нибудь хотя бы направление даст. А то гуглится всякая древняя фигня, которая уже не работает.

Собственно вопрос - а как мне руками сделать аутентификацию в спринге через соап сообщение, чтобы работали аннотации?
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796035
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kriptman, те, кто работали с soap - уже умерли. Не стоит тревожить их души.
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796133
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kriptman,
Под слоем SOAP поместите свой слой спринг типа rest.
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796301
Kriptman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Какое-то странное решение. Оно, скорее всего, будет работать, но выглядит как костыль. Если бы нужно было решение любой ценой, то воспользовался бы, спасибо. Но хотелось бы сделать красиво.

Как я понимаю, у меня проблема в очерёдности фильтров\проверок, но ведь должен быть способ это сконфигурировать?
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796305
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kriptman,
Не думаю что костыль. В шарпе soap это обертка http методов. То есть rest.
Вы в soap меняете протокол одной галкой.
IMHO.
Чем штатная в соап аутентификация не устроила?
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796355
Kriptman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Ну это просто ещё один слой в приложении. На каждый сервис. И каждый новый метод придётся добавлять ещё и там. И пробрасывать все параметры туда-сюда лишний раз. Или я неправильно понял мысль?

Проблема не в проверке пользователя, с этим всё понятно и решено. Штатными апачевскими методами. Я и с политиками извращался, и с коллбекхендлером, в вопросе разобрался более-менее. И куда уж стандартнее, чем аутентификация прямо внутри запроса одним куском? Или я не заметил слона, который всё это делает из коробки?

Проблема в том, что нужно передать эту аутентификацию, прошедшую через cxf, в спринг секьюрити, так чтобы работали аннотации этого самого секьюрити. Чтобы я мог пометить нужные методы нужными ролями (rolesallowed, secured или ещё как) и оно само вжух и полетело. Как это сделать руками вообще без спринга мне понятно. Как это сделать в чисто спринговом рест-приложении тоже понятно.
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796374
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kriptman,
Я так и не понял, что мешает БЕЗ спринга работать с ролями SOAP?
Там нет работы с ролями? Не нашли? Лень? Не можете жить без спринга?
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796398
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kriptman, не читал, но может пригодится: Integrating Spring Security with Apache CXF RESTful web service
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796402
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovKriptman, не читал, но может пригодится: Integrating Spring Security with Apache CXF RESTful web service
Ошибся главой: Integrating Spring Security with Apache CXF SOAP based web service
...
Рейтинг: 0 / 0
Apache CXF + Spring Security
    #39796430
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovKachalovKriptman, не читал, но может пригодится: Integrating Spring Security with Apache CXF RESTful web service
Ошибся главой: Integrating Spring Security with Apache CXF SOAP based web service
- фиговую ссылку дал (почитал, там совсем не про то), вот может wss4j решит Вашу проблему
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache CXF + Spring Security
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]