Предполагая, что вы хотите перенаправить пользователей на разные стартовые страницы в зависимости от назначенных им ролей, вы можете попробовать это.Обратите внимание, что я делаю все это вне Struts.
Сначала создайте свой собственный класс, который расширяет Springs SimpleUrlAuthenticationSuccessHandler, и переопределите метод onAuthenticationSuccess ().Фактическое перенаправление выполняется в методе onAuthenticationSuccess () строкой getRedirectStrategy (). SendRedirect (request, response,);
Таким образом, все, что вам нужно, это средство замены ваших собственных URL.
Так, например, у меня есть
package com.blackbox.x.web.security;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.RequestCache;
import com.blackbox.x.entities.UserDTO;
import com.blackbox.x.services.UserService;
public class StartPageRouter extends SimpleUrlAuthenticationSuccessHandler {
@Autowired
UserService userService;
@Autowired
LoginRouter router;
protected final Logger logger = Logger.getLogger(this.getClass());
private RequestCache requestCache = new HttpSessionRequestCache();
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication) throws IOException,
ServletException {
requestCache.removeRequest(request, response);
User user = (User) authentication.getPrincipal();
UserDTO userDTO = userService.find(user.getUsername());
getRedirectStrategy().sendRedirect(request, response, router.route(userDTO));
}
public void setRequestCache(RequestCache requestCache) {
this.requestCache = requestCache;
}
}
, где LoginRouter - это мой собственный класс, который принимает зарегистрированного пользователя и из назначенных ролей определяет, на какой URL-адрес должен быть направлен пользователь.
Затем вы конфигурируете Spring Security для использования вашей версии, используя
authentication-success-handler-ref="customTargetUrlResolver"/>
и
<beans:bean id="customTargetUrlResolver" class="com.blackbox.x.web.security.StartPageRouter"/>
в XML-файле контекста безопасности.