Spring Security-为外部工具创建SessionScoped会话

时间:2019-04-01 05:22:41

标签: spring authentication spring-security

在我的应用程序中,我需要针对外部工具进行身份验证。

  • 通过与外部工具建立会话来进行身份验证。
  • 用户通过身份验证后,外部会话应该保留(创建过程很昂贵,出于许可原因)
  • 一旦用户取消身份验证或关闭了Spring会话范围(Spring会话无效),会话就应该关闭

我不确定用户认证后如何创建和注册会话范围的bean。这就是我现在所拥有的:

@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);
  }
}

关于如何以编程方式创建和注册作用域bean的会话的任何提示? 另外,如果我注销用户,是否可以确保Spring Session被销毁?

谢谢你!

0 个答案:

没有答案