Доступ к RedirectAttributes в методе без RedirectAttributes в подписи

1

Можно ли получить доступ к RedirectAttributes в методе без RedirectAttributes в сигнатуре? Например, при переопределении метода, как показано ниже:

@Override
public void onAuthenticationSuccess(final HttpServletRequest req, final HttpServletResponse res,
        final Authentication auth) throws IOException, ServletException {

    // add something to RedirectAttributes here
    // redirectAttributes.addFlashAttribute("attr", "value");

    super.onAuthenticationSuccess(req, res, auth);
}

Я использую весну 3.2.2.RELEASE.

  • 0
    Что вы собираетесь делать с атрибутами?
  • 0
    @Ivan Иван Мне нужно, чтобы они добавили указание на то, что клиент впервые попал на домашнюю страницу.
Показать ещё 2 комментария
Теги:
servlets
spring
spring-mvc

2 ответа

1

Как вы видите в реализации класса DispatcherServlet, существуют константы:

public static final String FLASH_MAP_MANAGER_BEAN_NAME = "flashMapManager";
public static final String OUTPUT_FLASH_MAP_ATTRIBUTE = DispatcherServlet.class.getName() + ".OUTPUT_FLASH_MAP";
public static final String FLASH_MAP_MANAGER_ATTRIBUTE = DispatcherServlet.class.getName() + ".FLASH_MAP_MANAGER";

Spring имеет класс под названием RequestContextUtils, который имеет методы:

public static Map<String, ?> getInputFlashMap(HttpServletRequest request)
public static FlashMap getOutputFlashMap(HttpServletRequest request)    
public static FlashMapManager getFlashMapManager(HttpServletRequest request)

Первые два метода дадут вам доступ к входным и выходным флэш-картам соответственно. Последний метод возвращает FlashMapManager, который имеет несколько удобных методов для работы с атрибутами flash. См. Реализации этого интерфейса для деталей, в частности AbstractFlashMapManager.

  • 0
    Я отредактировал свой ответ, чтобы сделать его более понятным для вас
  • 0
    У меня такая же проблема. Мне нужно получить FlashMapManager или outputFlashMap в моих пользовательских Spring AuthSuccessHandler и AuthFailureHandler. Руководство говорит, что FlashMapManager и FlashMap никогда не равны нулю ( docs.spring.io/autorepo/docs/spring/3.2.3.RELEASE/javadoc-api/… ), но, к сожалению, это так. Не могли бы вы поделиться своим опытом доступа к менеджеру флеш-карты или самой флеш-карте с места редиректа? Атрибуты недоступны. Спасибо.
0

Если ваша цель - "добавить указание, что клиент впервые приземлился на домашней странице", тогда HttpSession может сделать трюк:

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
      throws IOException
{
    ...
    boolean firstLogin = <determine whether this is the first login>;
    <reset condition that caused firstLogin to be true>;
    ...
    HttpSession session = request.getSession(false);
    if (session != null) {
        session.setAttribute("firstLogin", firstLogin);
    }
    else {
        log.debug("No session");
    }
}

// Controller for some page
@RequestMapping(value = <your page>, method = RequestMethod.GET)
public String showPage(<some other args>, HttpSession session)
{
    ...
    Object firstLogin = session.getAttribute("firstLogin");
    Assert.isInstanceOf(Boolean.class, firstLogin, "firstLogin");
    if ((Boolean)firstLogin) {
        <handle first login>;
    }
    ...
    return <page>;
}

Это работает для меня. Логика этого заключается в том, что логин находится в контексте всего сеанса, который, предположительно, содержит несколько запросов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню