Spring Security - создайте SessionScoped Session для внешнего инструмента - PullRequest
0 голосов
/ 01 апреля 2019

В моем приложении мне нужно пройти аутентификацию по внешнему инструменту.

  • Аутентификация происходит путем создания сеанса с внешним инструментом.
  • Внешний сеанс должен сохраняться после аутентификации пользователя (дорого создавать, из-за лицензии)
  • Сессия должна быть закрыта после деаутентификации пользователя или закрытия области весенней сессии (весенняя сессия становится недействительной)

Я не уверен, как создать и зарегистрировать сессионный компонент после аутентификации пользователя. Вот что у меня сейчас:

@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 будет уничтожен, если я выйду из системы?

Спасибо, уже!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...