Oltre a @ DaveSyer's answer, che dovrebbe funzionare per la maggior parte dei casi. A volte in base alla configurazione e alla personalizzazione, il metodo sopra menzionato potrebbe non funzionare, se FrameworkEndpointHandlerMapping
dal pacchetto Spring Security OAuth ha un ordine superiore a RequestMappingHandlerMapping
della tua applicazione. Se questo è il caso, il dispatcher servlet non ti raggiungerà mai e mostrerà sempre la pagina predefinita.
Un modo per risolverlo è modificare l'ordine dei mapper, dato che l'ordine di FrameworkEndpointHandlerMapping
è Order.LOWEST_PRECEDENCE - 2
.
Un altro modo è quello di impostare la pagina di approvazione per un URL personalizzato, non mappata FrameworkEndpointHandlerMapping
, quindi servlet dispatcher raggiunge mappatura vi dell'applicazione
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthorizationEndpoint authorizationEndpoint;
@PostConstruct
public void init() {
authorizationEndpoint.setUserApprovalPage("forward:/oauth/custom_confirm_access");
authorizationEndpoint.setErrorPage("forward:/oauth/custom_error");
}
}
Con un tale mappature di configurazione di /oauth/custom_confirm_access
e /oauth/custom_error
saranno utilizzati come una pagina di conferma e una pagina di errore rispettivamente.
C'è un altro modo per personalizzare la pagina. Nella mia applicazione di installazione 'HandlerMapping' ha un ordine inferiore a' org.springframework.security.oauth2.provider.endpoint.FrameworkEndpointHandlerMapping' e, di conseguenza, i mapping personalizzati vengono acquisiti dopo quelli predefiniti e non sovrascrivono questi ultimi? – schatten
Non penso di seguirlo. Devi solo fornire una risorsa a/oauth/confirm_access (o qualsiasi altra cosa personalizzi il percorso dell'endpoint). Non importa come lo fai. –
'Framew orkEndpointHandlerMapping' ha un ordine di 'Order.LOWEST_PRECEDENCE - 2', ma il mio personalizzato' RequestMappingHandlerMapping' ha un ordine di' Order.LOWEST_PRECEDENCE' quindi 'org.springframework.web.servlet.DispatcherServlet # getHandler' seleziona' Framew La mappatura e la richiesta di orkEndpointHandlerMapping' non raggiungono mai il mio controller cliente. Purtroppo cambiare ordini non è un'opzione per me in questo momento. Quello che ho finito è 'authorizationEndpoint.setUserApprovalPage (" forward:/oauth/customer_path ")'; nel metodo '@ PostConstruct' di' AuthorizationServerConfiguration'. – schatten