我有一个带有登录页面的JSF2.2应用程序,我需要控制用户对页面的访问,所以我编写了一个web过滤器,但问题是当我尝试访问会话范围的JSF托管bean时,它总是返回null。我已经登录,并确保登录正常,用户设置正确,但当我访问bean时,它仍然返回null
这是我访问bean的过滤器代码
UserLogin loginBean = (UserLogin) ((HttpServletRequest) request).getSession().getAttribute("userLogin");
下面是带有login-in方法的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