Лучший способ определить целевой URL-адрес на основе ролей — указать целевой URL-адрес в конфигурации Spring Security, как показано ниже. Это будет работать в Spring 3.0 или 3.1.
<http>
...
<form-login login-page="/login" default-target-url="/default"/>
</http>
Затем создайте контроллер, который обрабатывает целевой 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";
}
}
Преимущества этого подхода заключаются в том, что он не связан с какой-либо конкретной реализацией Security, он не связан с какой-либо конкретной реализацией 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"/>
Я бы не рекомендовал делать это, так как это связано с API Spring Security, и по возможности этого лучше избегать.
person
Rob Winch
schedule
30.11.2011