【发布时间】:2015-04-30 15:59:09
【问题描述】:
我有一个带有登录页面的 JSF 2.2 应用程序我需要控制用户对页面的访问,所以我编写了一个 Web 过滤器,但问题是当我尝试访问会话范围的 JSF 托管 bean 时它总是返回 null。我已经登录并确保登录正常并且用户设置正确但是当我访问 bean 时它仍然返回 null
这是我访问 bean 的过滤器代码
UserLogin loginBean = (UserLogin) ((HttpServletRequest) request).getSession().getAttribute("userLogin");
这里是方法中登录的bean代码
@Named(value = "userLogin") @SessionScoped @ManagedBean
public class UserLogin implements Serializable {
/**
* Creates a new instance of UserLogin
*/
public UserLogin() {}
private static final long serialVersionUID = 1520318172495977648L;
private User user = null;
String email, password;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void login() {
UserHelper userHelper = new UserHelper();
user = userHelper.Login(email, password);
if (user != null) {
FacesMessage msg = new FacesMessage("Successful", "Welcomesss :" + user.getFirstname());
FacesContext.getCurrentInstance().addMessage(null, msg);
} else {
FacesMessage msg = new FacesMessage("Failed", "Wrong Usernames or password.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
}
我编写了一个示例代码来检索所有会话属性,但我找不到 userLogin 这是方法及其输出
Enumeration attrs = ((HttpServletRequest) request).getSession().getAttributeNames();
while (attrs.hasMoreElements()) {
LOG.log(Logger.Level.FATAL, attrs.nextElement());
}
FATAL: WELD_S #10
FATAL: com.sun.faces.application.view.activeViewMaps
FATAL: org.jboss.weld.context.conversation.ConversationIdGenerator
FATAL: com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap
FATAL: org.jboss.weld.context.ConversationContext.conversations
FATAL: com.sun.faces.application.view.activeViewContexts
FATAL: javax.faces.request.charset
FATAL: org.jboss.weld.context.beanstore.http.LockStore
【问题讨论】:
-
你的
@SessionScoped的导入是什么? -
我想稍后从过滤器中的会话中获取此 bean 的值。
-
@Ahemd Saad 我明白了,但我问的是 SessionScoped 的导入语句,“import ...”?
-
导入 javax.enterprise.context.SessionScoped;
标签: jsf servlet-filters jsf-2.2