Я использую 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?
Является ли этот подход неправильным, должен ли я попробовать что-то другое для выхода из системы?