从HttpSessionListener中获取用户名

时间:2012-10-11 06:12:20

标签: java servlets

我想从HttpSessionListener.sessionCreated()中获取用户名。当我说用户名时,我的意思是HttpServletRequest.getRemoteUser()返回的名称。

显然,必须有一个HttpServletRequest对象导致会话被创建(因此sessionCreated()调用)。但是如何从sessionCreated()内访问它?传递到HttpSessionEvent的{​​{1}}对象似乎无法获取导致会话创建的sessionCreated()对象。

3 个答案:

答案 0 :(得分:4)

HttpSessionListener无权访问HttpServletRequest对象,因为在没有请求时调用它来通知会话销毁或创建。

因此,过滤器可以更好地将username = request.getRemoteUsr()添加到会话中。

示例 - 过滤代码

String username = request.getRemoteUsr() ;
session.setAttribute("username",username);

然后在sessionCreated方法中将此用户名作为

进行检索
String username = (String)session.getAttribute("username");

我希望您将获得在HttpSessionListener sessionCreated()方法中创建此会话的相同请求的相同用户名。

答案 1 :(得分:0)

// set
session.setAttribute("username", request.getRemoteUser();

// get
String un = (String) session.getAttribute("username");

答案 2 :(得分:0)

您可以使用HttpSessionAttributeListener

public class UsernameHttpSessionAttributeListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        if (httpSessionBindingEvent.getName().equals("username")) {
            // do something
        }
    }

    ...
}

当然,您需要在HTTP会话的任何位置(例如,在servlet过滤器中)设置属性username