简体   繁体   中英

How to redirect my previous page after SSO Login in spring security?

How to redirect my previous page after SSO Login in spring security

I used set userReferer as true,

But not able achieve it. please suggest some sample code or site.

Spring security with IDP we are using

public class LoginSuccessHandler extends SimpleUrlAuthenticationSuccessHandler
        implements AuthenticationSuccessHandler {

    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();

    public LoginSuccessHandler() {
        super();
        setUseReferer(true);
    }

    @Override
    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {

        /// some code 

        //set our response to OK status
        httpServletResponse.setStatus(HttpServletResponse.SC_OK);

        String targetUrl = determineTargetUrl(authentication);

        httpServletResponse.sendRedirect(targetUrl);
    }
}

Once the user gets authenticated on IDP (Identity provider) side then SP (Service provider) receives assertions or response from IDP. That response would be validated on SP side. Upon response validation, this class OAuthUserLoginSuccessHandler would be called, where you can extract the information from the response provided by IDP and proceed with redirection as per the following code.

  import org.springframework.security.core.Authentication;
  import org.springframework.security.core.userdetails.UserDetails;
  import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

  public class OAuthUserLoginSuccessHandler extends 
      SavedRequestAwareAuthenticationSuccessHandler {
   public OAuthUserLoginSuccessHandler() {}

   @Override
    public void onAuthenticationSuccess(final HttpServletRequest request,
     final HttpServletResponse response, final Authentication authentication)
     throws IOException, ServletException {

    if (authentication.getPrincipal() instanceof UserDetails
         || authentication.getDetails() instanceof UserDetails) {
    UserDetails details;

    if (authentication.getPrincipal() instanceof UserDetails) {
      details = (UserDetails) authentication.getPrincipal();
    } else {
      details = (UserDetails) authentication.getDetails();
    }

    String username = details.getUsername();
    // get user info from datastore using username 
    // some code 
 
    String redirectUri;  // get target uri either from relay state or from datastore
    if (null != redirectUri) {
       response.sendRedirect(redirectUri);
       return;
     }
   }
   super.onAuthenticationSuccess(request, response, authentication);
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM