Zugriff auf .xhtml sperren [JSF]

R

R4Z0r1337

Hallo!
Ich habe folgendes Problem:
Ich habe eine adminboard.jsf auf die sollen, logischerweise, nur Admins zugreifen können.
Dies funktioniert auch schon so einigermaßen, mithilfe eines PhaseListeners, allerdings sobald irgendein Benutzer in die Adressleiste "..../pages/adminboard.xhtml" eingibt, wird ihm die Seite angezeigt, wenn allerdings
"..../pages/adminboard.jsf" eingegeben wird, funktioniert alles einwandfrei und der Benutzer wird normal weitergeleitet.

MyPhaseListener:
Code:
public class MyPhaseListener implements PhaseListener {

    public void afterPhase(PhaseEvent pe) {
        try {
            FacesContext fc = pe.getFacesContext();
            UserBean currentUser = UserBean.getUserBean(fc.getExternalContext());
           
            String viewid = fc.getViewRoot().getViewId();

            if (viewid.contains("/adminboard") && !currentUser.isAdmin()) {
                nh.handleNavigation(fc, null, "back");
            }
        } catch (NullPointerException npe) {
            //do nothing
        }
    }

    public void beforePhase(PhaseEvent pe) {
        //do nothing
    }

    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
}

UserBean:
Code:
public class UserBean {

    private String username;
    private String password;
    private boolean admin = false;
    private boolean loggedIn = false;
    private static final long ADMINISTRATION_GROUP = 1L;
  

    /**
     * Loggt den User ein.
     * 
     * @return Navigationrule
     */
    public String login() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            User user = DBAccess.login(username, password);
        } catch (SQLException e) {
            return "login_failed";
        }

        if (user == null) {
            loggedIn = false;
            return "login_failed";
        }
        loggedIn = true;

        if (user.getUserGroup() == ADMINISTRATION_GROUP) {
            admin = true;
        }
        return "login_successfull" ;
    }

....sehr sehr viele Getter/Setter Methoden....

}

Möglicherweise können einige von euch mir einen Lösungsansatz nennen :)
lg
 

Neue Beiträge

Zurück