2013-11-14 2 views
2

Я пытаюсь выйти из приложения в приложении jsf в качестве администратора, пока я поддерживаю сеанс, но эти усилия ничего не приносят. Пользователь может легко аннулировать свой сеанс в моем приложении, но то, что я хочу достичь, - это ситуация, когда другой пользователь говорит, что администратор может выйти из других пользователей.JSF выходит из других пользователей при сохранении моей активной сессии.

Итак, мой главный вопрос: как я могу получить доступ к сеансам других пользователей и можно ли хранить сеансы jsf в базе данных?

Спасибо за любую помощь.

+3

возможно дубликат [аннулируют-сессии -of-а-специфический пользователь] (http://stackoverflow.com/questions/9219393/invalidate-session-of-a-specific-use r) – lefloh

+1

Что приходит мне на ум в качестве простого решения, так это иметь управляемый bean-компонент, управляемый '@ ApplicationScoped', с картой и всеми зарегистрированными в настоящее время пользователями. Принесите доступ к нему только с учетными данными администратора. Если вы хотите аннулировать сеанс, отметьте на карте недопустимыми. Вы должны сделать все запросы пользователей проверять эту карту в каждом запросе и, если сеанс недействителен, сделать процесс недействительности для текущего пользователя. –

ответ

1

Этот код создает Session Listener, который управляет открытыми сеансами в списке, который может быть введен. После этого вы можете вводить список сеансов через @SessionList

SessionListener.java

public class SessionListener implements HttpSessionListener { 

    @Inject 
    @SessionList 
    private List<HttpSession> sessions; 

    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
    session.add(event.getSession()); 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
     session.remove(event.getSession()); 
    } 

} 

SessionList.java

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Qualifier 
public @interface SessionList { 
} 

SessionProducer.Java

@ApplicationScoped 
public class SessionProducer { 
    private List<HttpSession> session; 

    @Produces 
    @SessionList 
    public void List<Session> getSessions() { 
     if(sessions == null) sessions = new LinkedList<HttpSession>(); 
     return sessions; 
    } 
} 
Смежные вопросы