la redirection à partir d'un filtre de servlet pour jsf retourne la vraie jsf code pas rendu html
ci-dessous mon 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.
}
}
Si j'utilise FacesContext.getCurrentInstance(), java.lang.Nullpointer Exception se produit;
Si j'utilise la réponse.sendRedirect("Login.xhtml"); elle montre une page blanche, si je fais afficher la source, je peux voir la source de la Connexion.xhtml en jsf. il n'est pas rendu au format html..
ce que je veux faire est la suivante: si l'utilisateur n'est pas connecté et accéder à toute page, puis l'envoyer à la Connexion.xhtml, si l'utilisateur est sur de Connexion.xhtml puis lui montrer la page de login.
s'il vous plaît aider..
Avez-vous été capable de rendre la page de login sans filtre? Je voudrais tout d'abord assurez-vous que sans filtre de connexion.xhtml rendu correctement. Si, sans le filtre de connexion.xhtml pas de rendu, puis, plus probablement quelque chose de mal avec l'url de la cartographie dans faces-config.xml
OriginalL'auteur Fayyaz Ali | 2012-06-21
Vous devez vous connecter pour publier un commentaire.
Rediriger vers une URL qui correspond à l'
FacesServlet
de cartographie. Apparemment, il est mappé sur/faces/*
au lieu de*.xhtml
. Ensuite rediriger versfaces/Login.xhtml
.Voici une réécriture, ce qui simplifie la logique:
C'est le modèle d'URL sur laquelle le
FacesServlet
doit être invoquée. Si c'est/faces/*
, alors c'est seulement appelée sur les URLs correspondantes/faces/*
. Si c'est*.xhtml
, alors c'est seulement appelée sur les URLs correspondantes*.xhtml
. À l'aide de*.xhtml
ne se traduira pas par une inutile chemin supplémentaire et vous pouvez aussi ne pas besoin de jouer avec ce chemin d'accès virtuel partout. Fait juste sens, je pense?OriginalL'auteur BalusC