Najlepszym sposobem ustalenia adresu URL na podstawie ról jest określenie adresu docelowego w konfiguracji Spring Security, jak pokazano poniżej. To będzie działać wiosną 3.0 lub 3.1
<http>
...
<form-login login-page="/login" default-target-url="/default"/>
</http>
Następnie utwórz kontroler, który przetwarza adres URL domyślnego celu. Sterownik powinien przekierowywać lub przekazywać dalej na podstawie zwojów. Poniżej znajduje się przykład użycia Spring MVC, ale dowolny typ kontrolera zadziała (tj. Struts, Servlet itp.).
@Controller
public class DefaultController {
@RequestMapping("/default")
public String defaultAfterLogin(HttpServletRequest request) {
if (request.isUserInRole("ROLE_ADMIN")) {
return "redirect:/users/sessions";
}
return "redirect:/messages/inbox";
}
}
Zaletą tego podejścia jest to nie jest połączony z żadną konkretną realizację Bezpieczeństwa, nie jest dołączony do każdej konkretnej implementacji MVC i działa z łatwością konfiguracji przestrzeni nazw Wiosna Bezpieczeństwa. Pełny przykład można znaleźć w projekcie SecureMail, który zaprezentowałem na SpringOne w tym roku.
Alternatywą jest możliwość utworzenia niestandardowego AuthenticationSuccessHandler. Implementacja może rozszerzyć SavedRequestAwareAuthenticationSuccessHandler, który jest domyślnym AuthenticationSuccessHandler. następnie można go podłączyć za pomocą przestrzeni nazw, jak pokazano poniżej.
<sec:http>
<sec:form-login authentication-success-handler-ref="authSuccessHandler"/>
</sec:http>
<bean:bean class="example.MyCustomAuthenticationSuccessHandler"/>
nie polecam robić to jak to jest związane z Wiosna Bezpieczeństwo API i lepiej tego uniknąć, jeśli to możliwe.