Мне нужно отредактировать основной идентификатор, который будет возвращен клиентскому приложению cas.
Принципал, который мне нужно отредактировать, возвращается с внешнего idp, которым я не владею, и его формат выглядит следующим образом:
Id: idp autogenerated ID having no meaning for my setup
Attributes:
... Some attributes I do not need ...
**ImportantId**(this is the property I need)
Я прочитал официальную документацию , поэтому, насколько я понимаю, соответствующая часть моего служебного файла json должна быть:
...
"usernameAttributeProvider" : {
"@class" : "com.mypackage.cas.principal.MyCustomRegisteredServiceUsernameProvider",
"canonicalizationMode" : "NONE"
В моем пользовательском классе UserNameProvider
мне нужно получить доступ к базе данных, чтобы получить свое конкретное имя пользователя для установки на основе ImportantId , о котором я упоминал выше, поэтому мне нужно сделать что-то вроде этого:
public class MyCustomRegisteredServiceUsernameProvider implements RegisteredServiceUsernameAttributeProvider {
@Autowired
UsersService usersService;
@Override
public String resolveUsername(Principal principal, Service service, RegisteredService registeredService) {
// String importantId = ...getting it from principal attributes..
return usersService.getUserNameFromImportant(importantId);
}
}
Проблема в том, что аннотация Autowired
, к сожалению, не работает, поэтому мой UsersService
не инициализируется, что приводит к NPE во время выполнения.
Итак, во-первых, я хотел бы знать, почему мой подход не работает, и, во-вторых, каков "официальный" способ добиться такого поведения?
Cas Версия: 5.3.4 Шаблон оверлея Cas
Конверт: W10 x64, Java 8
Развернуто на Wildfly 12