当前用户的Spring Bean会话范围

时间:2012-11-11 17:03:31

标签: spring session login scope

我刚刚开始在大学和春天一起工作,因此我仍然很失落。目前我们正在尝试编写一个几乎可以复制涂鸦的应用程序。

我们设法构建了一个login.jsp,它实际上验证了我们的h2数据库的登录,然后重定向到所有可用的民意调查列表。现在我们希望能够从会话范围中获取currentUser以显示在右上角,并且还可以用于进一步的操作以及用户的签名。

到目前为止,我已经使用:

编辑了我的spring-config.xml
    <!-- Session Scope -->
<bean id="userInfo" class="de.nordakademie.iaa.nakdate.sessionbeans.UserInfo" scope="session">
</bean>

然后我把这个

<p align="right">%{#userInfo.username}</p>

进入header.jsp,即使是没有用户登录的第一页,也会在每个页面上都可见。这是一种聪明的方法吗?它甚至可以工作吗?

最后我创建了一个UserInfo.java,如下所示:

package de.nordakademie.iaa.nakdate.sessionbeans;

public class UserInfo {
public String username;

public UserInfo(){
    this.username = "Unregistered User";
}

}

我还将在此处发布我们的登录操作:

package de.nordakademie.iaa.nakdate.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

import de.nordakademie.iaa.nakdate.model.User;
import de.nordakademie.iaa.nakdate.service.UserService;

public class LogInUserAction extends ActionSupport {
private static final long serialVersionUID = 3734334931859908102L;
private transient UserService userService;
private transient User user;
private String email;
private String password;

@Override
public String execute() throws Exception {
    List<User> users = userService.loadAll();
    for (User currentUser : users) {
        if (currentUser.getEmail().equals(getEmail())) {
            if (currentUser.getPassword().equals(getPassword())) {
                return SUCCESS;
            }
        }
    }
    addActionError(getText("E-Mail / Passwort falsch!"));
    return ERROR;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public UserService getUserService() {
    return userService;
}

public void setUserService(UserService userService) {
    this.userService = userService;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

}

如果有人能帮忙解决这个问题,我将不胜感激。非常感谢你!

编辑: 我刚刚使用了调试标签,发现我的会话是空的。我需要做些什么来实际填充会话内容?

1 个答案:

答案 0 :(得分:1)

我可以想到两种方式: 第一种是添加一个模型属性并以这种方式访问​​jsp中的model属性:

在您的控制器中:

@Controller
public class MyController{

    @Autowired Userinfo userInfo;

    @RequestMapping
    public String myMethod(Model model){
        model.addAttribute("userInfo", userInfo);
        ....
    }

然后你可以在jsp:

中引用它
${userInfo.name}

第二种方法,遗憾的是没有文档化的方法是以这种方式引用作用域bean:

${sessionScope['scopedTarget.userInfo'].name}

这是从这里开始的:http://digitaljoel.nerd-herders.com/2010/11/01/accessing-spring-session-beans-in-jsp/