Лучший способ определить целевой URL-адрес на основе ролей - указать целевой URL-адрес в конфигурации Spring Security, как показано ниже.Это будет работать в Spring 3.0 или 3.1
<http>
...
<form-login login-page="/login" default-target-url="/default"/>
</http>
Затем создайте контроллер, который обрабатывает URL-адрес default-target-url.Контроллер должен перенаправить или переслать на основе бросков.Ниже приведен пример использования Spring MVC, но будет работать любой тип контроллера (например, Struts, сервлет и т. Д.).
@Controller
public class DefaultController {
@RequestMapping("/default")
public String defaultAfterLogin(HttpServletRequest request) {
if (request.isUserInRole("ROLE_ADMIN")) {
return "redirect:/users/sessions";
}
return "redirect:/messages/inbox";
}
}
Преимущества этого подхода в том, что он не связан с какой-либо конкретной реализациейБезопасность, она не связана с какой-либо конкретной реализацией MVC и легко работает с конфигурацией пространства имен Spring Security.Полный пример можно найти в проекте SecureMail , который я представил в SpringOne в этом году.
Альтернативой является то, что вы можете создать собственный AuthenticationSuccessHandler .Реализация может расширить SavedRequestAwareAuthenticationSuccessHandler, который является AuthenticationSuccessHandler по умолчанию.затем он может быть подключен с использованием пространства имен, как показано ниже.
<sec:http>
<sec:form-login authentication-success-handler-ref="authSuccessHandler"/>
</sec:http>
<bean:bean class="example.MyCustomAuthenticationSuccessHandler"/>
Я бы не рекомендовал делать это, поскольку он привязан к Spring Security API, и лучше избегать этого, когда это возможно.