spring-security 如何从pac 4j-http的2.31版升级到5.3.1版并修复org.pac4j.core.credentials.authenticator.Authenticator的参数?

f8rj6qna  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(137)

我正在尝试将pac 4j-http:2.31升级到5.3.1,需要帮助处理Authenticator接口中validate()函数的参数列表中的重大更改。
以前我使用的是Authenticator(org.pac4j.core.credentials.authenticator.Authenticator),它的方法是public void validate(TokenCredentials credentials, WebContext context),现在它改为public void validate(Credentials credentials, WebContext context, SessionStore sessionStore)
前面的代码如下:

private static class TestAuthenticator implements Authenticator<TokenCredentials>
  {
    @Override
    public void validate(TokenCredentials credentials, WebContext context)
    {
      if (TEST_TOKEN.equals(credentials.getToken()))
      {
        credentials.setUserProfile(mockUserProfile());
      }
    }
  }

所以我的问题是,如何升级到最新版本的5.3.1.,其中Authenticator类的validate方法具有Credential参数而不是TokenCredential?由于validate方法参数发生了变化,我们现在如何验证令牌?

cl25kdpy

cl25kdpy1#

由于CredentialsTokenCredentials的超类,因此您似乎可以执行以下操作:

private static class TestAuthenticator implements Authenticator {
  @Override
  public void validate(Credentials credentials, WebContext context, SessionStore sessionStore) {
    TokenCredentials tokenCredentials = (TokenCredentials) credentials;
    if (TEST_TOKEN.equals(tokenCredentials.getToken())) {
      tokenCredentials.setUserProfile(mockUserProfile());
    }
  }
}

但是,如果我遗漏了什么,请道歉。看起来泛型类型从Authenticator中被删除了,这意味着现在需要一个强制类型转换。

相关问题