Guten Morgen liebe Javafreunde !!
Ich hab da ein kleines Problem, ich habe eine statische Methode "isAllowed()" welche überprüfen soll ob die methode sie sie aufruft vom derzeitig eingeloggten Benutzer ausgeführt werden darf.
Benutzernamen, Gruppe u.s.w habe ich alles aber das problem ist das ich zum abgleichen eine query absenden muss und der EntityManager im statischen Kontext nicht ausführbar ist.
Deshalb habe ich eine nicht statische Methode "sql()" geschrieben die mir ein boolean liefert wenn ein Eintrag gefunden wurde.
Jetzt ist ja aber das Problem das ich in meiner statischen Methode die nichtstatische nicht aufrufen kann. :-(
Ich habe nachgelesen und gelesen das ich ein neues Objekt der nicht statischen Methode erstellen müsste aber das hieße ja das ich eine neue Klasse für die SQL_Abfrage schreiben müsste und dann komm ich wieder nicht an die Felder meiner KLasse mit der statischen Methode ran (benutzer, gruppe, rolle), oder?
ich bin verzweifelt... ich hab nur noch eine Woche um meine Projekt abzuschliessen und jetzt sowas
weiss jemand rat? hier mal der Code meiner Klasse, es wäre cool wen jemand einen Tip hätte wie ich es lösen kann ohne ein neues Objekt erstellen zu müssen.
Grüße Alex !!
Ich hab da ein kleines Problem, ich habe eine statische Methode "isAllowed()" welche überprüfen soll ob die methode sie sie aufruft vom derzeitig eingeloggten Benutzer ausgeführt werden darf.
Benutzernamen, Gruppe u.s.w habe ich alles aber das problem ist das ich zum abgleichen eine query absenden muss und der EntityManager im statischen Kontext nicht ausführbar ist.
Deshalb habe ich eine nicht statische Methode "sql()" geschrieben die mir ein boolean liefert wenn ein Eintrag gefunden wurde.
Jetzt ist ja aber das Problem das ich in meiner statischen Methode die nichtstatische nicht aufrufen kann. :-(
Ich habe nachgelesen und gelesen das ich ein neues Objekt der nicht statischen Methode erstellen müsste aber das hieße ja das ich eine neue Klasse für die SQL_Abfrage schreiben müsste und dann komm ich wieder nicht an die Felder meiner KLasse mit der statischen Methode ran (benutzer, gruppe, rolle), oder?
ich bin verzweifelt... ich hab nur noch eine Woche um meine Projekt abzuschliessen und jetzt sowas
weiss jemand rat? hier mal der Code meiner Klasse, es wäre cool wen jemand einen Tip hätte wie ich es lösen kann ohne ein neues Objekt erstellen zu müssen.
Grüße Alex !!
Java:
package setix.security;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
@ManagedBean
public class SecureControler {
private String user;
private static String methodenName;
private boolean adminRole;
private boolean customerRole;
private boolean employeeRole;
//Testquery liefert 2 Einträge zurück(3,6)
private static final String sqlQuery = "SELECT id from acl where methodenname = 'createLieferschein' and benutzername = 'alex'"+
"or methodenname = 'createLieferschein' and gruppenname ='admin'";
@PersistenceContext
EntityManager em;
//Testet die Funktion der isAllowed Methode
public void test(){
isAllowed();
}
public static boolean isAllowed(){
//aktuelle Methode abfragen welche diese Methode aufruft
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2];
methodenName = stackTraceElement.getMethodName();
if (sql() == true)
return true;
else return false;
}
//Setzt die query ab und gibt true zurück wenn ein eintrag gefunden wurde
public boolean sql(){
Query query = em.createNativeQuery(sqlQuery);
if (query.getResultList().isEmpty()){
return false;
}else
{
return true;
}
}
//GETTER für Benutzerinformatinen
public String getUser() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
user = request.getRemoteUser();
return user;
}
//Getter um den aktuellen Benutzerstatus zu prüfen(admin)
public boolean isAdminRole() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
adminRole = request.isUserInRole("admin");
return adminRole;
}
//Getter um den aktuellen Benutzerstatus zu prüfen(kunde)
public boolean isCustomerRole() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
customerRole = request.isUserInRole("customer");
return customerRole;
}
//Getter um den aktuellen Benutzerstatus zu prüfen(mitarbeiter)
public boolean isEmployeeRole() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
employeeRole = request.isUserInRole("employee");
return employeeRole;
}
//Methoden für die visuelle Darstellung der aktuellen Rechte
//Admin
public String adminLight(){
adminRole = isAdminRole();
if (adminRole == true)
return"green";
else return"red";
}
//Kunde
public String customerLight(){
customerRole = isCustomerRole();
if (customerRole == true)
return"green";
else return"red";
}
//Mitarbeiter
public String employeeLight(){
employeeRole = isEmployeeRole();
if (employeeRole == true)
return"green";
else return"red";
}
}