J'ai créé une application de printemps MVC et mettre en place la sécurité de printemps OAuth 2. Tout en appelant des méthodes de ma courroi, je reçois XML:
<oauth> <error_description> Full authentication is required to access this resource </error_description> <error>unauthorized</error> </oauth>
4 Réponses :
Pour la sécurité du printemps, les exceptions OAuth sont rendues à l'aide de la valeur par défautOauth2ExceptionRenderer P>
Il convient de faire correspondre l'en-tête HTTP reçu reçu contre les messageconsvers fournis. Dans votre cas, il semble que Spring Boot ait automatiquement attribué XML et JSON Messageconverters. Ce comportement est confirmé que sur la base de l'en-tête accepté, vous recevez l'exception rendue dans un type de contenu approprié p>
sans l'en-tête d'acceptation Si XML est indésirable dans votre application, vous devrez voir pourquoi il devient pris en charge (le plus probablement, vous avez un FasterXML Jackson dans You ClassPath). P>
Si vous souhaitez prendre en charge les deux mais que vous souhaitez que JSON par défaut, cela vous obligera à écrire votre propre implication de la Pour plus d'informations sur contentnegotationManager strong> Vérifiez ce lien: p>
https://spring.io/blog/ 2013/05/11 / contenu-négociation-utilisation-spring-mvc p>
SET Accepter: Application / JSON code> comme attribut d'en-tête p>
Il est très facile de forcer oauth2, il vous suffit de comprendre vous-même par vous-même:
@Bean public AccessDeniedHandler accessDeniedHandler() { return new AccessDeniedHandler () { @Override public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) throws IOException, ServletException { response.getWriter().append("\"FORBIDDEN\""); response.setStatus(HttpStatus.FORBIDDEN.value()); } }; } @Bean public AuthenticationEntryPoint authenticationEntryPoint() { return new AuthenticationEntryPoint() { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { response.getWriter().append("\"UNAUTHORIZED\""); response.setStatus(HttpStatus.UNAUTHORIZED.value()); } }; }
Pour développer la réponse de Bigdong, vous n'avez pas besoin de créer vos propres classes d'entrée et de gestionnaire d'exception, il vous suffit de remplacer le rendu et de définir le type de convertisseurs de messages que vous souhaitez utiliser. Par exemple, dans mon oauth2config, je fais ce qui suit: où le rendu est créé avec les convertisseurs de messages que je veux: p> enfin instancier Le gestionnaire de points d'entrée et d'erreur et définissez le rendu: p>