Hallo!
Folgendes: Ich habe eine Applikation in Struts entwickelt, welche unter anderem mit verschiedenen Benutzer - sprich verschiedene Rollen - umgehen muss. Welche Rollen welche Action sehen dürfen, habe ich in der struts-config.xml festgelegt...
Neben dieser Rollenverarbeitung arbeite ich außerdom noch mit Tiles - aber das nur nebenbei erwähnt.
Die Rolle eines Benutzers - ein entsprechendes User-Objekt wird in der Session abgelegt - wird in einer Datenbank abgespeichert. Derzeit habe ich die Überprüfung, ob ein Benutzer eine benötigte Rolle besitzt, folgendermaßen implementiert:
den TilesRequestProcessor, und im speziellen die Methode processRoles übesrchrieben
Wenn ein Benutzer eine bestimmte Rolle inne hat, so ist dieser berechtigt, diese Action auszuführen - klappt wunderbar.
Das Problem ist nur, dass ein unauthorisierter Benutzer, welcher eine für ihn nicht authorisierte Action ausführt, auf eine leere Seite weitergeleitet wird...
Quelltext dieser leeren Seite:
Meine Frage ist nun: wie bzw. wo kann ich festlegen, auf welche Seite ein unauthorisierter Benutzer weitergeleitet wird, wenn dieser eine nicht authorisierte Action ausführen will. Ich hätte es gerne folgendermaßen gelöst, dass der Benutzer anstatt dass er auf eine leere Seite geforwarded wird, auf eine Seite verwiesen wird, auf welcher eine Information steht, dass der Benutzer diese Rolle nicht besitzt...
Muss ich da irgendeinen globalen forward definieren?? oder kann ich das gar in der processRoles definieren??
Folgendes: Ich habe eine Applikation in Struts entwickelt, welche unter anderem mit verschiedenen Benutzer - sprich verschiedene Rollen - umgehen muss. Welche Rollen welche Action sehen dürfen, habe ich in der struts-config.xml festgelegt...
Code:
<action path="/admin"
type="org.dea.odm.struts.actions.OdmForwardAction"
roles="admin">
<forward path="screen.admin" name="success" />
</action>
Neben dieser Rollenverarbeitung arbeite ich außerdom noch mit Tiles - aber das nur nebenbei erwähnt.
Die Rolle eines Benutzers - ein entsprechendes User-Objekt wird in der Session abgelegt - wird in einer Datenbank abgespeichert. Derzeit habe ich die Überprüfung, ob ein Benutzer eine benötigte Rolle besitzt, folgendermaßen implementiert:
den TilesRequestProcessor, und im speziellen die Methode processRoles übesrchrieben
Code:
protected boolean processRoles( HttpServletRequest request,
HttpServletResponse response, ActionMapping mapping )
throws IOException, ServletException {
this.logger.log(Level.INFO, "processRoles");
// get the role of the current user
HttpSession session = request.getSession();
Employee empl = (Employee) session.getAttribute(Constants.USER_SESS_KEY);
String user_role = (String) session.getAttribute(Constants.USER_ROLE_SESS_KEY);
// get the authorized roles for this action
String[] roles = mapping.getRoleNames();
StringBuffer tmp = new StringBuffer();
for (int i = 0; i < roles.length; i++) {
tmp.append("'");
tmp.append(roles[i]);
tmp.append("' - ");
}
this.logger.log(Level.INFO, "Authorized Roles: " + tmp.toString());
// if there are no role or the length is less than 1, the user is
// authorized
if (null == roles || roles.length < 1) {
this.logger.log(Level.INFO, "User '" + empl.getUsername()
+ "' is authorized, because there are no roles!");
return true;
}
for (int i = 0; i < roles.length; i++) {
// if the user_role equals a quthorized role, the access is garanted
if (roles[i].equals(user_role)) {
this.logger.log(Level.INFO, "User '" + empl.getUsername()
+ "' is authorized, because he has role '" + roles[i]
+ "'");
return true;
}
}
this.logger.log(Level.INFO, "User '" + empl.getUsername()
+ "' is NOT authorized, because he has the unauthorized role '"
+ user_role + "'!");
return false;
}
Wenn ein Benutzer eine bestimmte Rolle inne hat, so ist dieser berechtigt, diese Action auszuführen - klappt wunderbar.
Das Problem ist nur, dass ein unauthorisierter Benutzer, welcher eine für ihn nicht authorisierte Action ausführt, auf eine leere Seite weitergeleitet wird...
Quelltext dieser leeren Seite:
Code:
<html><body></body></html>
Meine Frage ist nun: wie bzw. wo kann ich festlegen, auf welche Seite ein unauthorisierter Benutzer weitergeleitet wird, wenn dieser eine nicht authorisierte Action ausführen will. Ich hätte es gerne folgendermaßen gelöst, dass der Benutzer anstatt dass er auf eine leere Seite geforwarded wird, auf eine Seite verwiesen wird, auf welcher eine Information steht, dass der Benutzer diese Rolle nicht besitzt...
Muss ich da irgendeinen globalen forward definieren?? oder kann ich das gar in der processRoles definieren??