Как реализовать выход из системы при использовании безопасности на основе форм

Я использую JDBC form based security realm, и я хочу реализовать выход из системы, но когда я нажимаю на ссылку, я вижу это исключение:

java.lang.RuntimeException: java.security.AccessControlException: access denied (java.lang.reflect.ReflectPermission suppressAccessChecks) ... Вызвано: java.security.AccessControlException: доступ запрещен (java.lang.reflect.ReflectPermission suppressAccessChecks)

Вот EJB, который я создал для выполнения loggout:

@Stateless(name = "ejbs/SessionSupportEJBImpl")
@DeclareRoles({"administrators","users"})
public class SessionSupportEJBImpl implements SessionSupportEJB {

    @PermitAll
    public void releaseUserState() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
                .getExternalContext().getSession(false);
        if (session != null) {
            session.invalidate();
        }
    }
}

Здесь я вызываю его из backing bean:

@Named("logoutBB")
@RequestScoped
public class LogoutBean {

    @EJB
    private SessionSupportEJB sessionSupportEJB;

    public String logout() {
        sessionSupportEJB.releaseUserState();
        return "index.xhtml?faces-redirect=true";
    }
}

А здесь разметка, которая должна вызвать его:

<h:form>
        <h:commandLink value="LOGOUT" action="#{logoutBB.releaseUserState}"/>
    </h:form>

Мои сомнения:

  • Как заставить функцию logout работать?

  • Обязательно ли использовать аннотации безопасности ejbs всегда на моих EJB для разрешения доступа? (При использовании области безопасности)

  • Должен ли я делать это с сервлетом вместо EJB?

  • Является ли этот подход неправильным, должен ли я попробовать что-то другое для выхода из системы?

5
задан sfrj 24 November 2011 в 21:06
поделиться