3

我想从内部获取用户名HttpSessionListener.sessionCreated()。当我说用户名时,我的具体意思是由HttpServletRequest.getRemoteUser().

显然,一定有一个HttpServletRequest对象导致会话被创建(因此sessionCreated()调用)。但是我如何从内部访问它sessionCreated()HttpSessionEvent传入的对象sessionCreated()似乎无法获取HttpServletRequest导致创建会话的对象。

4

3 回答 3

5

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

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

示例 - 过滤器代码

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

然后在 sessionCreated 方法中检索此用户名

String username = (String)session.getAttribute("username");

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

于 2012-10-11T07:05:54.047 回答
0
// set
session.setAttribute("username", request.getRemoteUser();

// get
String un = (String) session.getAttribute("username");
于 2012-10-12T05:32:31.867 回答
0

您可以使用HttpSessionAttributeListener

public class UsernameHttpSessionAttributeListener implements HttpSessionAttributeListener {

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

    ...
}

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

于 2019-07-25T05:51:53.943 回答