das umleiten von ein servlet-filter, jsf gibt die eigentlichen jsf-code nicht gerendert html
unten ist mein code;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package racms;
import java.io.IOException;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter("/faces/*")
public class AuthenticationFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//If you have any <init-param> in web.xml, then you could get them
//here by config.getInitParameter("name") and assign it as field.
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
String pageRequested = request.getRequestURI().toString();
//try{
//FacesContext fctx = FacesContext.getCurrentInstance();
//NavigationHandler myNav = fctx.getApplication().getNavigationHandler();
if(session==null){
session = request.getSession(true); //will create a new session
response.sendRedirect("Login.xhtml");
//myNav.handleNavigation(fctx, null, "Login");
}else if(session==null && pageRequested.contains("Login.xhtml")){
// session.getAttribute("user");
chain.doFilter(request, response); //continue filtering
}else if((session.getAttribute("user")== null) && (!pageRequested.contains("Login.xhtml"))){
response.sendRedirect("Login.xhtml");
//myNav.handleNavigation(fctx, null, "Login");
}else {
chain.doFilter(request, response);
}
//}catch(Exception e){
// System.out.println("Error :"+ e);
//}
/*if ((((HttpServletRequest) req).getSession().getAttribute("user") == null)) {
FacesContext fctx = FacesContext.getCurrentInstance();
NavigationHandler myNav = fctx.getApplication().getNavigationHandler();
myNav.handleNavigation(fctx, null, "Login");
//response.sendRedirect(request.getContextPath() + "/Login.xhtml"); //No logged-in user found, so redirect to login page.
} else {
chain.doFilter(req, res); //Logged-in user found, so just continue request.
}*/
}
@Override
public void destroy() {
//If you have assigned any expensive resources as field of
//this Filter class, then you could clean/close them here.
}
}
Wenn ich FacesContext.getCurrentInstance(), java.lang.Nullpointer Exception Auftritt;
Wenn ich Antwort.sendRedirect("Login.xhtml"); es zeigt eine leere Seite, wenn ich Quelltext anzeigen sehe ich, dass die Quelle der Login.xhtml in jsf. es ist nicht dargestellt, um html..
was ich tun will ist: wenn der Benutzer nicht angemeldet ist und Zugriff auf eine beliebige Seite, dann schicken Sie ihn zur Anmeldung.xhtml, wenn der Benutzer auf Login.xhtml dann zeig ihm die Seite, um sich einzuloggen.
bitte helfen..
Waren Sie in der Lage, render-login-Seite ohne filter? Ich würde zuerst sicherstellen, ohne filter login.xhtml korrekt wiedergegeben. Wenn Sie ohne filter auch anmelden.xhtml nicht Rendern, dann die meisten wahrscheinlich etwas falsch mit url-mapping in faces-config.xml
InformationsquelleAutor Fayyaz Ali | 2012-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Redirect zu einer URL, die Spiele der
FacesServlet
mapping. Anscheinend ist es abgebildet/faces/*
statt*.xhtml
. Dann umleiten zufaces/Login.xhtml
.Hier ist ein rewrite, das vereinfacht die Logik:
Es ist die URL-Muster, auf dem die
FacesServlet
aufgerufen werden soll. Wenn es/faces/*
ist, dann ist es nur aufgerufene URLs/faces/*
. Wenn es*.xhtml
ist, dann ist es nur aufgerufene URLs*.xhtml
. Mit*.xhtml
nicht im Ergebnis eine überflüssige Weg und Sie auch nicht brauchen, zu hantieren mit diesem virtuellen Pfad überall. Macht nur Sinn, denke ich?InformationsquelleAutor BalusC