Dropwizard属性未存储在会话中

时间:2013-07-18 20:57:33

标签: dropwizard

我有一个登录界面,我有一个带有用户名和密码字段的简单表格。成功登录尝试后,我想将用户存储在会话中并重定向到主页。 loginUser方法是LoginResource类的一部分

@POST
    public View loginUser(@FormParam("user") String username, @FormParam("pass") String password, @Context HttpServletRequest req) 
    {
        LoginService ls = new LoginService();
        User user = ls.login(username, password);
        if(user == null)
            return new LoginView();
        else
        {
            req.setAttribute("appUser", user);
            req.getSession().setAttribute("appUser", user);
            return new HomeView();
        }
    }

HomeView类:

public class HomeView extends View
{

    public HomeView()
    {
        super("home.ftl");
    }

}

Freemarker template home.ftl:

<html>
    <head>
    </head>
    <body>
        <#if appUser??>
            <h1>Welcome, ${appUser.username}!</h1>
        <#else>
            AppUser is not found in the session
        </#if>
    </body>
</html>

扩展Service的类的run()方法:

@Override
    public void run(Configuration configuration, Environment environment) throws Exception {
        //setting session handler
         environment.setSessionHandler(new SessionHandler());
         environment.addResource(new LoginResource());
   }

问题在于,当我成功登录尝试时,似乎我的用户未保存在会话中。不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

问题是您没有将会话中的对象传递给freemarker模板:您必须将User传递给HomeView。

请将您的HomeView更改为

public class HomeView extends View
{
    private User user;

    public HomeView(User user)
    {
        super("home.ftl");
        this.user = user;
    }

    public User getUser() {
        return user;
    }
}

并在您的freemarker模板中将其引用为$ {user.username}。

希望它可以帮助你。

再见 皮耶罗