В моем приложении мне нужно пройти аутентификацию по внешнему инструменту.
- Аутентификация происходит путем создания сеанса с внешним инструментом.
- Внешний сеанс должен сохраняться после аутентификации пользователя (дорого создавать, из-за лицензии)
- Сессия должна быть закрыта после деаутентификации пользователя или закрытия области весенней сессии (весенняя сессия становится недействительной)
Я не уверен, как создать и зарегистрировать сессионный компонент после аутентификации пользователя. Вот что у меня сейчас:
@Component
public class ExternalToolAuthenticationProvider implements AuthenticationProvider {
private final GenericApplicationContext applicationContext;
@Autowired
public CmsAuthenticationProvider(GenericApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String name = authentication.getName();
String password = authentication.getCredentials().toString();
Session externalSession = createSession(name, password);
if (externalSession.isAuthenticated()) {
// Somehow register session scoped bean here
return new UsernamePasswordAuthenticationToken(name, password, new ArrayList<>());
} else {
return null;
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
Любые советы о том, как я могу программно создавать и регистрировать сессионный компонент?
Также гарантируется, что Spring Session будет уничтожен, если я выйду из системы?
Спасибо, уже!