JSF HTTP Session Login

Ich versuche, ein Anmeldeformular in einer Webanwendung zu erstellen. in JSP-Seite kann ich @ verwend

<%
   String name = request.getParameter( "username" );
   session.setAttribute( "theName", name );
%>

aber jetzt verwende ich JSF / Facelets für die Webanwendung. Ich kann keine Sitzung in JSF Backing Bean für den Client erstellen und prüfen, ob der Benutzer angemeldet ist oder nicht, damit er zur Anmeldeseite weitergeleitet wird. Wer kann mir helfen, mir ein Link-Tutorial für dieses Problem zu geben? danke vor

Now Ich habe ein kleines Problem mit der Zuordnung in web.xml-Code der Klasse Filter geschnitten

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    this.config = filterConfig;
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;
    LoginController controller = (LoginController) req.getSession()
            .getAttribute("loginController");
    if (controller == null || !controller.isLoggedIn()) {
        res.sendRedirect("../admin/login.xhtml");
    } else {
        chain.doFilter(request, response);
    }
}

und inweb.xml Ich Karte mit<fitler> Etiket

<filter>
    <filter-name>userLoginFilter</filter-name>
    <filter-class>com.mcgraw.controller.UserLoginFilter</filter-class>
    <init-param>
        <param-name>loginPage</param-name>
        <param-value>/login.xhtml</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>userLoginFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
</filter-mapping>

Ich habe einen Ordner admin im Webprojekt und ich überprüfe, ob der Benutzer nicht mit Administratorberechtigung angemeldet ist, um nicht auf die Seite zuzugreifen (ich kann die Berechtigungsprüfung durchführen), aber wenn ich den Filter verwende, versteht der Browser die URL nicht? Keine StackTrace-Show, wenn der Browser url @ nicht verste

Error wird in Firefox angezeigt

The page isn't redirecting properly

on IE wird geladen ... wird geladen. .. non-stop

Jetzt ändere ich die Bedingung, die prüft, ob req.getPathInfo.startsWith ("/ login.xhtml") eine Verkettung durchführt.

Ich habe 2 Idee, aber es Antwort 500 HTTP STATUS

 if (controller == null || !controller.isLoggedIn()) {
     res.sendRedirect("../admin/login.xhtml");
     if(req.getPathInfo().startsWith("/login.xhtml")){
     chain.doFilter(request, response);
}

} else {
     chain.doFilter(request, response);
}

===============

if (controller == null || !controller.isLoggedIn()) {
    if (!req.getPathInfo().startsWith("/login.xhtml")) {
        res.sendRedirect("../admin/login.xhtml");
    } else {
        chain.doFilter(request, response);
    }
} else {
    chain.doFilter(request, response);
}

====================== Klasse loginController aktualisieren

package com.mcgraw.controller;

import com.DAO.UserBean;
import com.entity.IUser;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * @author Kency
 */
@ManagedBean
@SessionScoped
public class LoginController implements Serializable {

    @EJB
    private UserBean userBean;
    private IUser user;
    private boolean admin;
    private boolean mod;
    private PasswordService md5;

    /** Creates a new instance of LoginController */
    public LoginController() {
        user = new IUser();
        md5 = new PasswordService();
    }

    // getter / setter
    public boolean isMod() {
        return mod;
    }

    public void setMod(boolean mod) {
        this.mod = mod;
    }

    public IUser getUser() {
        return user;
    }

    public void setUser(IUser user) {
        this.user = user;
    }

    public boolean isAdmin() {
        return admin;
    }

    public void setAdmin(boolean admin) {
        this.admin = admin;
    }

    public String cplogin() {
        String md5Password = md5.md5Password(user.getPassword());
        if (userBean.userLogin(user.getUsername(), md5Password) != null) {
            if (user.getUsername() != null || md5Password != null) {
                user = userBean.userLogin(user.getUsername(), md5Password);
                if (user.getGroups().getAdmin() != null) {
                    setAdmin(user.getGroups().getAdmin());
                }
                if (user.getGroups().getMods() != null) {
                    setMod(user.getGroups().getMods());
                }
                if (isAdmin() == true || isMod() == true) {
                    return "home";
                } else {
                    return "login";
                }
            } else {
                return "login";
            }
        } else {
            return "login";
        }
    }

    public String logout() {
        user = null;
        return "login";
    }

    public boolean isLoggedIn() {
        return user != null;
    }
}

Ich habe ein neues Problem, wenn die JSF-TagLib mit der Methode "eingeloggt" gerendert wird. Auf der Indexseite (nicht im Admin-Ordner) kann sich der Benutzer nicht anmelden aber warum kann er es sehen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage