13 Şubat 2020 Perşembe

SpringSecurity SimpleUrlAuthenticationSuccessHandler Sınıfı - FormLogin İle Kullanılır, Farkı Sayfaya Yönlendirir, Farklı Http Kodu Döner

Giriş
Bu sınıfın iki kullanım amacı var

1. Kullanıcıları rollerine göre farklı sayfalara yönlendirmek içindir. Açıklaması şöyle
A common requirement for a web application is to redirect different types of users to different pages after login. An example of this would be redirecting standard users to a /homepage.html page and admin users to a /console.html page for example.
2. Rest ile Form login authentication yaparken farklı bir Http kodu dönmek için kullanılır. Açıklaması şöyle. Http 301 yerine 200 gönderir. 
By default, form login will answer a successful authentication request with a 301 MOVED PERMANENTLY status code; this makes sense in the context of an actual login form which needs to redirect after login.

However, for a RESTful web service, the desired response for a successful authentication should be 200 OK.

We do this by injecting a custom authentication success handler in the form login filter, to replace the default one. The new handler implements the exact same login as the default org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler with one notable difference – it removes the redirect logic:
Ayrıca bir projede HttpServletResponse'a "Role" header eklenerek kullanıcıya rollerinin de gönderildiğini gördüm

Örnek
Şöyle yaparız
@Component
public class CustomSuccessHandler extends SimpleUrlAuthenticationSuccessHandler{
  ...
}
onAuthenticationSuccess metodu
Örnek
Şöyle yaparız. Burada sadece Http 200 döndürülüyor.
private AuthenticationSuccessHandler successHandler() {
  return new AuthenticationSuccessHandler() {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest,
                                        HttpServletResponse httpServletResponse,
                                        Authentication authentication)
                                        throws IOException, ServletException {
      httpServletResponse.getWriter().append("OK");
      httpServletResponse.setStatus(200);
    }
  };
}

Hiç yorum yok:

Yorum Gönder