Completare un po 'l'opzione HandlerMethodArgumentResolver
. Al fine di supportare i seguenti:
@RequestMapping(
value = WEB_HOOKS,
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public List<SomeDTO> getThoseDTOs(@CurrentClientId String clientId)
{
// Do something with clientId - it will be null if there was no authentication
}
avremo bisogno del HandlerMethodArgumentResolver
registrato con il nostro contesto di applicazione (per me questo è stato all'interno di un WebMvcConfigurerAdapter
). Il mio HandlerMethodArgumentResolver
assomiglia a questo:
public class OAuth2ClientIdArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(CurrentClientId.class) != null
&& parameter.getParameterType().equals(String.class);
}
@Override
public Object resolveArgument(
MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory)
throws Exception
{
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(authentication == null) {
return null;
}
String clientId = null;
if (authentication.getClass().isAssignableFrom(OAuth2Authentication.class)) {
clientId = ((OAuth2Authentication) authentication).getOAuth2Request().getClientId();
}
return clientId;
}
}
E la definizione @interface
:
@Target({ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentClientId {
}
fonte
2015-02-02 18:57:26
Questo mi ha restituito l'utente principale e non l'applicazione id client – BigDong
Versione aggiornata: 'auth.getOAuth2Request(). GetClientId()' – Cataclysm