У нас есть школьный проект, в котором мы должны разработать программу администрирования 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 ("пользователь", пользователь) или где я должен использовать эту команду.