Jsp User/Rollensystem aber wie?

Ryu20

Mitglied
Hi,

ich habe eine kleine Web-Anwendung gebastelt (mit Struts 2, Spring, Hibernate + bissle ajax).

Habe auch ein einfaches Login erstellt, aber würde jetzt gerne noch ein Art Rollensystem einbauen.

Damit meine ich User1 mit Rolle "lesen" darf nur bestimmte Menüpunkte sehen, bestimmte Seiten aufrufen usw....

Meine Anwendung basiert Hauptsächlich auf einer MySQL Datenbank (Menüs usw. sind darin definiert)

Wie kann ich dieses Rollensystem so verwirklichen, das ich es mit so wenig wie möglich an Aufwand erweitern kann.

Hoffe jemand hat ein paar Ideen für mich.

Danke schon mal
 
Ich kann dir leider nicht helfen aber ich hätte eine frage, ich
bastelte zurzeit auch an struts rum und würde jetzt gerne eine Login Seite erstellen.
Mir fehlt aber das Verständnis wie man das in struts realisiert.
Wo wird die Logik eingebaut um den User zu Verifizieren und wenn er eine Seite aufruft die für ihn nicht bestimmt ist wie fliegt er wieder raus?
etwas von deinem Code und ein Paar Kommentare wären sehr hilfreich.
Würde mich über eine Antwort von dir sehr freuen.
MFG
 
Hi sorry für die späte Antwort.

also mein Login ist ziemlich einfach, kein https oder sonst was.

Ich habe einen interceptor gemacht, der überprüft ob eine betimmte Session Variable vorhanden ist, falls ja wird davon ausgegangen das der User eingelogt ist, falls nicht wird er zu der Login seite geleitet.
Beim versuch einzuloggen ist ein vertecktes input feld auf der Login Seite, (LoginAttempt)
dieses Feld ist mit irgendeinem wert gefüllt, denn sobald dies != null dann wird versucht den user mit den eingegebenen Daten einzuloggen.

Code:
package de.interceptor;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import de.WebDataNames;
import de.core.SecurityManagerImpl;
import de.interfaces.SecurityManager;
import org.apache.struts2.StrutsStatics;

public class LoginInterceptor extends AbstractInterceptor implements StrutsStatics {

    private static final long serialVersionUID = 1411315499641012294L;
    private SecurityManager securityManager = new SecurityManagerImpl();

    private static final String USERNAME = "username";
    private static final String PASSWORD = "password";

    public String intercept (ActionInvocation invocation) throws Exception {

        final ActionContext context = invocation.getInvocationContext ();
        HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
        HttpSession session =  request.getSession (true);

        Object user = session.getAttribute (WebDataNames.SESSION_USER_SESSSION_HANDLE);

        if (user == null) {

            String loginAttempt = request.getParameter (WebDataNames.LOGIN_ATTEMPT);

            if (loginAttempt != null  ) { 
                String username = request.getParameter (USERNAME);
                String password = request.getParameter (PASSWORD);
                if (!isValid(username) || !isValid(password)){
                    if (!isValid(username)){
                        addFieldError(invocation, USERNAME);
                    }
                    if(!isValid(password)){
                        addFieldError(invocation, PASSWORD);
                    }
                } else {

                    if (tryLogin (username, password, session) ) {
                        return "login-success";
                    } else {

                        Object action = invocation.getAction ();
                        if (action instanceof com.opensymphony.xwork2.ActionSupport) {
                            ActionSupport as = ((com.opensymphony.xwork2.ActionSupport) action);
                            as.addActionError (as.getText("incorrect.user.data"));
                        }
                    }
                }
            }
            return "login";
        } else {
            return invocation.invoke ();
        }
    }

    private boolean isValid( String text){
        if (text != null && !text.equals("")){
            return true;
        }
        return false;
    }

    public void addFieldError(ActionInvocation invocation, String fieldName){
        Object action = invocation.getAction ();

        if (action instanceof com.opensymphony.xwork2.ActionSupport) {
            ActionSupport va = ((com.opensymphony.xwork2.ActionSupport) action);
            va.addFieldError(fieldName, va.getText(fieldName) + " " + va.getText("requiredstring"));
        }
    }

    public boolean tryLogin(String username, String password, HttpSession session) {
        Object user = securityManager.login (username, password, session);

        if (user != null) {
            session.setAttribute (WebDataNames.SESSION_USER_SESSSION_HANDLE, user);
            return true;
        } else {
            return false;
        }
    }

}
securityManager kümmert sich nur darum das username/passwort mit der Datenbank abgeglichen werden und gibt true/false zurück.

und denk dran die struts.xml Datei anzupassen:

Code:
<interceptor name="login"
                class="de.interceptor.LoginInterceptor" />

<interceptor-stack name="defaultLoginStack">
                <interceptor-ref name="servlet-config" />
                <interceptor-ref name="params" />
                <interceptor-ref name="login" />
                <interceptor-ref name="prepare" />
                <interceptor-ref name="chain" />
                <interceptor-ref name="model-driven" />
                <interceptor-ref name="fileUpload" />
                <interceptor-ref name="static-params" />
                <interceptor-ref name="params" />
                <interceptor-ref name="conversionError" />
                <interceptor-ref name="validation" />
                <interceptor-ref name="workflow" />
            </interceptor-stack>

<interceptor-stack name="defaultInsecureStack">
                <interceptor-ref name="servlet-config" />
                <interceptor-ref name="params" />
                <interceptor-ref name="prepare" />
                <interceptor-ref name="chain" />
                <interceptor-ref name="model-driven" />
                <interceptor-ref name="fileUpload" />
                <interceptor-ref name="static-params" />
                <interceptor-ref name="params" />
                <interceptor-ref name="conversionError" />
                <interceptor-ref name="validation" />
                <interceptor-ref name="workflow" />
            </interceptor-stack>

<default-interceptor-ref name="defaultLoginStack" />

<!-- 
wenn ohne LoginInterceptor eine Action ausgeführt werden soll
-->
<action name="blabla">
            <interceptor-ref name="defaultInsecureStack" />
            <result>blabla.jsp</result>
        </action>
Ich hoffe das hilft ein wenig weiter.
 
Zurück