Получить управляемый компонент из фильтра сервлета (пусто)

Я видел много сообщений, подобных моему, но ни один не мог мне помочь.

это мой управляемый компонент, и он имеет сессиюScoped, если вход в систему в порядке, он перенаправляет на индексную страницу, иначе отображается ошибка

@ManagedBean
@SessionScoped
public class LoginBean implements Serializable  {
/**
 * 
 */
private static final long serialVersionUID = 1L;
private static final String[] users = {"anna:qazwsx","kate:123456"};

private String username;
private String password;

private boolean loggedIn     
public String doLogin() {
    for (String user: users) {
        String dbUsername = user.split(":")[0];
        String dbPassword = user.split(":")[1];

        // Successful login
        if (dbUsername.equals(username) && dbPassword.equals(password)) {
            loggedIn = true;
            return "/tmpl/home/index.xhtml?faces-redirect=true";
        }
    }

    // Set login ERROR
    FacesMessage msg = new FacesMessage("Login error!", "ERROR MSG");
    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
    FacesContext.getCurrentInstance().addMessage(null, msg);

    return "/login/login.xhtml";
 }

 public boolean isLoggedIn() {
    return loggedIn;
 }
}

Представление, здесь все нормально, вызывает метод doLogin управляемого компонента

<h:form id="login-form">
 <h:messages />
 <h:outputText value="Nom d'utilisateur:"/>
 <h:inputText value="#{loginBean.username}" id="username"/>
 <br/>
 <h:outputText value="Mot de passe:"/>
 <h:inputSecret value="#{loginBean.password}" id="password"/>
 <br/>
 <h:commandButton id="button" value="Login" action="#{loginBean.doLogin}" />    
 <br/>
</h:form>

Фильтр: если пользователь аутентифицирован, тогда loginBean не равен нулю и регистрируется

public class LoginFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response,   FilterChain chain) throws IOException, ServletException {      
    HttpSession session = ((HttpServletRequest) request).getSession(false);
    LoginBean loginBean = (session != null) ? (LoginBean) session.getAttribute("loginBean") : null;


    if (loginBean!=null)
        System.out.println(loginBean.getUsername());

    if (loginBean == null || !loginBean.isLoggedIn()) {
        System.out.println("here agai");
        String contextPath = ((HttpServletRequest)request).getContextPath();
        ((HttpServletResponse)response).sendRedirect(contextPath + "/login/login.xhtml");
    }         
    chain.doFilter(request, response);             
  }
}

Почему мой управляемый компонент (loginBean) имеет значение null?


person jsf    schedule 13.03.2015    source источник
comment
Попробуйте с @javax.enterprise.context.SessionScoped.   -  person alexander    schedule 13.03.2015
comment
@Александр, на самом деле, наоборот. Он использует аннотацию JSF ManagedBean, поэтому ему нужно использовать javax.faces.bean.SessionScoped.   -  person DavidS    schedule 13.03.2015
comment
О, спасибо, ребята, я не импортировал javax.faces.bean.SessionScoped, я использовал javax.enterprise.context.SessionScoped.   -  person jsf    schedule 13.03.2015
comment
Ой, простите - мой плохой! Я использую @SessionScoped в CDI-Bean. Извините, что напутал!   -  person alexander    schedule 14.03.2015


Ответы (1)


Вы подтвердили, что используете правильную аннотацию SessionScoped?

См. здесь: Фильтр входа JSF, сеанс равен нулю

person DavidS    schedule 13.03.2015
comment
Это больше комментарий, чем ответ. Я был незадолго до того, чтобы спросить то же самое. - person alexander; 13.03.2015
comment
Спасибо, я не видел этот пост, поэтому мой вопрос не нужен. - person jsf; 13.03.2015