在签名中没有RedirectAttributes的方法中访问RedirectAttributes

时间:2015-02-06 13:24:59

标签: java spring spring-mvc servlets

是否可以在签名中没有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。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

如果您的目标是&#34;添加客户第一次登陆主页的指示,&#34;然后HttpSession可以做到这一点:

#include <iostream>

using namespace std;

class bank 
{
 public:

  bank();

  void output(ostream& out)
  {
    out<<account;
  }

  int revised(int acc)
  {
  acc=acc+acc*2;
  }

  void set_account(int a)
  {
  account = a;
  }

  int get_account()
  {
  return account;   
  }


private:

int account;

};



int main()
{
bank obj1;
int i;
cout << "Enter your money";
cin>>i;

obj1.set_account(i);
obj1.output(cout);

return 0;
}

这对我有用。这背后的逻辑是登录是在整个会话的上下文中,可能包含多个请求。