やっとOAuth2ClientAuthenticationProcessingFilterを再構築し、successfulAuthenticationメソッドをオーバーライドすることにより解決しました。
重要なポイントは、認証が成功した後、プリンシパルから自分のGithubアカウントであるかどうかを判断することです。
次に、SecurityContextHolder.getContext()。getAuthentication()によって現在成功している認証OAuth2Authenticationが取得されます。その後、新しい認証を作成し、SecurityContextHolderに新しいOAuth2Authenticationを作成します。
public class CustomOAuth2ClientAuthenticationProcessingFilter extends OAuth2ClientAuthenticationProcessingFilter {
public CustomOAuth2ClientAuthenticationProcessingFilter(String defaultFilterProcessesUrl) {
super(defaultFilterProcessesUrl);
}
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
super.successfulAuthentication(request, response, chain, authResult);
if (authResult.getPrincipal().equals("cciradih")) {
OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
SecurityContextHolder.getContext().setAuthentication(new OAuth2Authentication(oAuth2Authentication.getOAuth2Request(), new Authentication() {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER");
}
@Override
public Object getCredentials() {
return oAuth2Authentication.getCredentials();
}
@Override
public Object getDetails() {
return oAuth2Authentication.getUserAuthentication().getDetails();
}
@Override
public Object getPrincipal() {
return oAuth2Authentication.getPrincipal();
}
@Override
public boolean isAuthenticated() {
return oAuth2Authentication.getUserAuthentication().isAuthenticated();
}
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
}
@Override
public String getName() {
return oAuth2Authentication.getName();
}
}));
}
}
}
UsernamePasswordTokenが間違っています。 OAuthなどの認証方法は異なります。最終的にOAuth2ClientAuthenticationProcessingFilterを再構築し、successfulAuthenticationメソッドをオーバーライドして解決しました。重要な点は、認証が成功した後に、プリンシパルから自分のGithubアカウントであるかどうかを判断することです。次に、SecurityContextHolder.getContext()によるOAuth2Authenticationの現在の正常な認証。 GetAuthentication()get。その後、新しい認証を作成し、SecurityContextHolderに新しいOAuth2Authenticationを作成します。 – Cciradih