org.springframework.security.boot.facebook.authentication.FacebookMatchedAuthenticationFailureHandler Maven / Gradle / Ivy
package org.springframework.security.boot.facebook.authentication;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.boot.biz.authentication.nested.MatchedAuthenticationFailureHandler;
import org.springframework.security.boot.biz.exception.AuthResponse;
import org.springframework.security.boot.biz.exception.AuthResponseCode;
import org.springframework.security.boot.facebook.SpringSecurityFacebookMessageSource;
import org.springframework.security.boot.facebook.exception.FacebookAccessTokenExpiredException;
import org.springframework.security.boot.facebook.exception.FacebookAccessTokenIncorrectException;
import org.springframework.security.boot.facebook.exception.FacebookAccessTokenInvalidException;
import org.springframework.security.boot.facebook.exception.FacebookAccessTokenNotFoundException;
import org.springframework.security.boot.utils.SubjectUtils;
import org.springframework.security.core.AuthenticationException;
import com.alibaba.fastjson.JSONObject;
/**
* Facebook 认证请求失败后的处理实现
*/
public class FacebookMatchedAuthenticationFailureHandler implements MatchedAuthenticationFailureHandler {
protected MessageSourceAccessor messages = SpringSecurityFacebookMessageSource.getAccessor();
@Override
public boolean supports(AuthenticationException e) {
return SubjectUtils.isAssignableFrom(e.getClass(), FacebookAccessTokenExpiredException.class,
FacebookAccessTokenIncorrectException.class, FacebookAccessTokenInvalidException.class,
FacebookAccessTokenNotFoundException.class );
}
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException e) throws IOException, ServletException {
response.setStatus(HttpStatus.OK.value());
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
if (e instanceof FacebookAccessTokenExpiredException) {
JSONObject.writeJSONString(response.getOutputStream(), AuthResponse.of(AuthResponseCode.SC_AUTHZ_CODE_EXPIRED.getCode(),
messages.getMessage(AuthResponseCode.SC_AUTHZ_CODE_EXPIRED.getMsgKey(), e.getMessage())));
} else if (e instanceof FacebookAccessTokenIncorrectException) {
JSONObject.writeJSONString(response.getOutputStream(), AuthResponse.of(AuthResponseCode.SC_AUTHZ_CODE_INCORRECT.getCode(),
messages.getMessage(AuthResponseCode.SC_AUTHZ_CODE_INCORRECT.getMsgKey(), e.getMessage())));
} else if (e instanceof FacebookAccessTokenInvalidException) {
JSONObject.writeJSONString(response.getOutputStream(), AuthResponse.of(AuthResponseCode.SC_AUTHZ_CODE_INVALID.getCode(),
messages.getMessage(AuthResponseCode.SC_AUTHZ_CODE_INVALID.getMsgKey(), e.getMessage())));
} else if (e instanceof FacebookAccessTokenNotFoundException) {
JSONObject.writeJSONString(response.getOutputStream(), AuthResponse.of(AuthResponseCode.SC_AUTHZ_CODE_REQUIRED.getCode(),
messages.getMessage(AuthResponseCode.SC_AUTHZ_CODE_REQUIRED.getMsgKey(), e.getMessage())));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy