Как мне реализовать фильтр входа в свой проект? - PullRequest
0 голосов
/ 14 января 2019

У нас есть школьный проект, в котором мы должны разработать программу администрирования JSF. Пользователь может иметь либо пользовательские права, либо права администратора.

Администраторы имеют право создавать новых пользователей. Все пользователи хранятся в нашей базе данных.

Я уже реализовал какую-то систему входа в систему, но недавно обнаружил, что если я пользователь без прав администратора, я все равно могу создавать новых пользователей, если я напишу имя файла .xhtml для создания пользователя в строке URL-адреса.

Чтобы предотвратить эту проблему, я должен использовать фильтрацию входа в систему.

Проблема в том, что я не могу понять, как мне это сделать.

Вот мой логин:

    package at.htlpinkafeld.htlplusinformatik.presentation;

import at.htlpinkafeld.htlplusinformatik.dto.Benutzer.Right;
import at.htlpinkafeld.htlplusinformatik.service.HtlPlusService;
import java.io.IOException;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Daniel Altmann
 */
@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {
    private static Logger logger = Logger.getLogger(LoginBean.class);

    private HtlPlusService service = new HtlPlusService();

    private String username;
    private String password;

    public LoginBean() {
        logger.log(Level.DEBUG, "Created instance of LoginBean.");
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void login() throws IOException {
        FacesContext context = FacesContext.getCurrentInstance();
        RequestContext context2 = RequestContext.getCurrentInstance();
        FacesMessage message = null;
        boolean loggedIn = false;

        for (int x = 0; x < service.getBenList().size(); x++) {
            if (username != null && username.equals(service.getBenList().get(x).getName())
                    && password != null && password.equals(service.getBenList().get(x).getPassword())
                    && service.getBenList().get(x).getRight() == Right.ADMIN) {

                loggedIn = true;
                message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", username);

                context.getExternalContext().redirect("/HTL_Plus_Informatik/faces/AdminStart.xhtml");
                context.getExternalContext().getFlash().setKeepMessages(true);

            } else if (username != null && username.equals(service.getBenList().get(x).getName())
                    && password != null && password.equals(service.getBenList().get(x).getPassword())
                    && service.getBenList().get(x).getRight() == Right.USER) {

                loggedIn = true;
                message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", username);

                context.getExternalContext().redirect("/HTL_Plus_Informatik/faces/MitgliedStart.xhtml");
                context.getExternalContext().getFlash().setKeepMessages(true);
            } else {
                loggedIn = false;
                message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error!", "Username oder Passwort falsch!");
            }
        }

        FacesContext.getCurrentInstance().addMessage(null, message);
        context2.addCallbackParam("loggedIn", loggedIn);
        logger.log(Level.INFO, "logged in");
    }

    public void logout() throws IOException{
        FacesContext context = FacesContext.getCurrentInstance();
        FacesMessage message;
        RequestContext context2 = RequestContext.getCurrentInstance();

        message = new FacesMessage(FacesMessage.SEVERITY_INFO,  username, " logged out!");

        context.getExternalContext().getFlash().setKeepMessages(true);   
        context.getExternalContext().redirect("/HTL_Plus_Informatik/faces/Login.xhtml");

        //PrimeFaces.current().dialog().showMessageDynamic(message);
        FacesContext.getCurrentInstance().addMessage(null, message);
        context2.addCallbackParam("loggedIn", true);
        logger.log(Level.INFO, "logged out");
    }
   }

И у меня нет класса фильтра, потому что проект даже не запустится, если я его создам.

Я проверил эту тему: Как реализовать фильтр входа в систему в JSF?

Но я все еще не могу понять, что делает то есть externalContext.getSessionMap (). Put ("пользователь", пользователь) или где я должен использовать эту команду.

...