hoe u LoginUrlAuthenticationEntryPoint uitbreidt of hoe AuthenticationEntryPoint implementeert

Ik probeer dit te doen: Maak voorjaarsbeveiliging en voeg de return toe aan de URL in de querystring voor de inlogpagina , dat is : haal de lente om de inlogpagina te vertellen waar ik vandaan kom. Ik heb wat SSO-integratie .. dus ik zal de URL naar ze sturen, of ze zullen de referer voor mij toevoegen, dus ik weet dat de gebruiker ingelogd moet zijn en naar /some/url . Dat is allemaal dandy. Het probleem dat ik ondervind, is uitbreiding van LoginUrlAuthenticationEntryPoint (tenzij u mij een goede reden kunt geven om in plaats daarvan AuthenticationEntryPoint te implementeren). Ik moet verzoeken alleen aanpassen aan de inlogpagina, zoals:

RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();

// only append returnto to '/login' urls
if(request.getServletPath() == "/login") {
   //indicates we want to return to this page after login
    redirectStrategy.sendRedirect(request, response, "/login?returnto=" + request.getServletPath());
}

Hoe kan ik de rest van de verzoeken hun ding laten doen? Dit is onjuist (wat ik net aan het doen was):

RequestDispatcher dispatcher = request.getRequestDispatcher("/login");

// just forward the request
dispatcher.forward(request, response);

omdat het ons in een omleidingslus plaatst. Het lijkt echter wat lente doet in de versie van begint . Ik ben in de war. Wat moet ik doen met beginnen in mijn aangepaste extensie naar LoginUrlAuthenticationEntryPoint ?

7

2 antwoord

Ik heb het uitgezocht. Alleen nodig om door te sturen naar de inlogpagina met 'returnto' toegevoegd. Ik vond het in eerste instantie verwarrend omdat LoginUrlAuthenticationEntryPoint op het eerste gezicht niet betekende 'dit leidt gebruikers om naar de inlogpagina'. Dit is alles wat ik nodig heb:

@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException {
    RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();

    redirectStrategy.sendRedirect(request, response, "/login?returnto=" + request.getServletPath());
}

this was useful: LoginUrlAuthenticationEntryPoint.java on grepcode.com

6
toegevoegd

Josh's code was precies wat ik nodig had om AJAX-authenticatiefouten in JavaScript te vangen, terwijl de standaard logica voor inlogomleidingen voor alle andere verzoeken nog steeds bewaard bleef. Omdat al mijn AJAX-verzoeken met "/ rest" beginnen, kon ik hierop filteren.

if(request.getRequestURI().contains("/rest/"))
    response.sendError(403);
else
    new DefaultRedirectStrategy().sendRedirect(request, response, "/login");
0
toegevoegd