2
我有問題定義自定義錯誤消息時登錄失敗,所以現在當我登錄失敗,我得到HTTP 400與有效載荷:春天的oauth2自定義登錄錯誤
如何自定義此消息,並返回自己的JSON?
我使用的是spring boot(1.3.2.RELEASE)和spring security OAuth2(2.0.8.RELEASE)。
我有問題定義自定義錯誤消息時登錄失敗,所以現在當我登錄失敗,我得到HTTP 400與有效載荷:春天的oauth2自定義登錄錯誤
如何自定義此消息,並返回自己的JSON?
我使用的是spring boot(1.3.2.RELEASE)和spring security OAuth2(2.0.8.RELEASE)。
首先,創建一個新的異常,擴展Oauth2Exception
。例如,我們有一個像CustomOauthException
如下:
@JsonSerialize(using = CustomOauthExceptionSerializer.class)
public class CustomOauthException extends OAuth2Exception {
public CustomOauthException(String msg) {
super(msg);
}
}
這裏我們要使用CustomOauthExceptionSerializer
序列化CustomOauthException
s到JSON字符串:
public class CustomOauthExceptionSerializer extends StdSerializer<CustomOauthException> {
public CustomOauthExceptionSerializer() {
super(CustomOauthException.class);
}
@Override
public void serialize(CustomOauthException value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeStringField("custom_error", value.getOAuth2ErrorCode());
gen.writeStringField("custom_error_description", value.getMessage());
if (value.getAdditionalInformation()!=null) {
for (Map.Entry<String, String> entry : value.getAdditionalInformation().entrySet()) {
String key = entry.getKey();
String add = entry.getValue();
gen.writeStringField(key, add);
}
}
gen.writeEndObject();
}
}
最後,我們需要在我們的AuthorizationServerConfigurerAdapter
來註冊一個將spring security的Oauth2Exception
s翻譯成我們的CustomOauthException
s。在這裏,我們有:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
// other endpoints
.exceptionTranslator(e -> {
if (e instanceof OAuth2Exception) {
OAuth2Exception oAuth2Exception = (OAuth2Exception) e;
return ResponseEntity
.status(oAuth2Exception.getHttpErrorCode())
.body(new CustomOauthException(oAuth2Exception.getMessage()));
} else {
throw e;
}
});
}
// rest of the authorization server config
}
畢竟這些,你會看到自定義的JSON響應:
{"custom_error":"invalid_grant", "custom_error_description":"Bad credentials"}
就像一個魅力:) – luckybastard
你知道該怎麼做的XML配置一樣嗎? – Jacek
太棒了!它確實對我有用!它現在在拋出一些異常時返回自定義異常消息。 – JacobChan