Я делаю логин.Проблема в том, что мой метод isUserLoggedIn () вызывается несколько раз другими сеансами (я проверил, используя (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)
).
Компонент Login (на странице JSF) выглядит так:
@Named
@SessionScoped
public class Login implements Serializable {
@Inject
private Credentials credentials;
private UserData user;
public String login() {
if (this.credentials.getUsername().equals("daniel")) {
user = new UserData("Daniel");
return "success";
}
return "failure";
}
public boolean isUserLoggedIn() {
return user != null;
}
public String logout() {
user = null;
((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)).invalidate();
return "success";
}
public String getUsername() {
return getUser() == null ? "" : getUser().getUsername();
}
@Produces
public UserData getUser() {
return user;
}
}
Итак, что происходит: когда вызывается login (), через getSession () я вижу, что это X, но затем, при попытке доступа к другой странице, при вызове isUserLoggedIn (), getSession ()Метод возвращает Y вместо X, а атрибут пользователя - ноль.Часто метод isUserLoggedIn () вызывается несколько раз с помощью всего одного запроса, и его сеанс меняется каждый раз, когда он вызывается.
Кстати, я использую JBoss AS7 Final, а мой Face-config.xmlэто следующее:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigation-rule>
<from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-action>#{login.login}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/secured/home.xhtml</to-view-id>
<redirect />
</navigation-case>
<navigation-case>
<from-action>#{login.login}</from-action>
<from-outcome>failure</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/*.xhtml</from-view-id>
<navigation-case>
<from-action>#{login.logout}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
</faces-config>
Есть идеи?Спасибо.