: 현재 인증에 GrantedAuthority가 추가의 예는 아래에 주어진다.
중요한 점은 첫 번째 단계는 인증이 성공한 후 사용자가 내 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