我想从HttpSessionListener.sessionCreated()
中获取用户名。当我说用户名时,我的意思是HttpServletRequest.getRemoteUser()
返回的名称。
显然,必须有一个HttpServletRequest
对象导致会话被创建(因此sessionCreated()
调用)。但是如何从sessionCreated()
内访问它?传递到HttpSessionEvent
的{{1}}对象似乎无法获取导致会话创建的sessionCreated()
对象。
答案 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
。