2013-04-30 2 views
0

사용자 로그인과 로그인 필터를 관리하기 위해 세션 범위가있는 bean이 있지만 다른 bean 내부에서 사용자 객체를 가져 와서 특정 데이터를 표시하는 방법을 모르겠습니다. 로그인 한 사용자에로그인 사용자 이름 얻기 (jsf 2)

이 내 로그인 콩이다.

@ManagedBean(name="user") 
     @SessionScoped 
     public class LoginBean { 

      private String username; 
      private String password; 
      private UsuariosEntity current; 

     public LoginBean(){} 
     @EJB 
     UsuariosDAO userService=new UsuariosDAO(); 



      public String login() { 

      try{ 
      current = userService.buscar(username, password); 

      System.out.println(current.getUsuario()); 
      }catch(Exception e){ 

      } 
       if (current == null) { 
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Unknown login, try again")); 
        return (username = password = null); 
       } else { 
        return "/Contenido/vistaProcesos?faces-redirect=true"; 
       } 
      } 

      public String logout() { 
       System.out.println("logout"); 
       FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
       return "/Login?faces-redirect=true"; 
      } 

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

     public String getUsername() { 
      return username; 
     } 

     public void setUsername(String username) { 
      this.username = username; 
     } 

     public String getPassword() { 
      return password; 
     } 

     public void setPassword(String password) { 
      this.password = password; 
     } 

     public UsuariosEntity getCurrent() { 
      return current; 
     } 



    } 

로그인 필터 :

@WebFilter("/Contenido/*") 
public class FiltroLogin implements Filter { 

    @Override 
    public void init(FilterConfig config) throws ServletException { 

    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     HttpServletRequest req = (HttpServletRequest) request; 
     LoginBean user = (LoginBean) req.getSession().getAttribute("user"); 

     if (user != null && user.isLoggedIn()) { 
      // User is logged in, so just continue request. 
      chain.doFilter(request, response); 
     } else { 
      // User is not logged in, so redirect to index. 
      HttpServletResponse res = (HttpServletResponse) response; 
      res.sendRedirect(req.getContextPath() + "/Login.jsf"); 
     } 
    } 

    @Override 
    public void destroy() { 

    } 


} 

이 내가하고 싶은 것입니다 :

@ManagedBean(name = "procesos") 
@ViewScoped 
public class ProcesosBean implements Serializable { 
    private List<VistaProcesosEntity> procesos; 

    @PostConstruct 
    public void init(){ 

      //i want to fill procesos List with data, depending of the user who is logged on. 

     procesos=new ArrayList<VistaProcesosEntity>(); 

     /* LoginBean user; // i dont know from where should i get the user object.. 

     if (user.getCurrent().getTipo()=="Planta") { 
     procesos= Procesos.getALL(); 
     }else if(user.getCurrent().getTipo()=="Exportadora"){ 
      procesos=Procesos.getALLbyExportadora(user.getCurrent().getUsuario()); 
     } else if (user.getCurrent().getTipo()=="Productor"){ 
      procesos=Procesos.getALLbyProductor(user.getCurrent().getUsuario()); 
     } else{ 
      procesos= Procesos.getALL(); 
     } */ 
    } 

    public List<VistaProcesosEntity> getProcesos() { 
     return procesos; 
    } 
+1

[@ManagedProperty annotation을 통해 전체 관리 빈을 주입하는 방법?] (http://stackoverflow.com/questions/5165567/how-to-inject-entire-managed-bean-via-managedproperty-annotation) – kolossus

+1

@ user1462933 : 일반 JSF 백킹 콩을 사용하겠습니까? CDI를 사용하면 실제로 이익을 얻을 수 있습니다. 당신이 그것에 대해 더 읽고 싶다면 : [here] (http://stackoverflow.com/questions/4347374/jsf-backing-beans-managedbean-or-cdi-beans-named) 또는 [here] (http : /stackoverflow.com/questions/2930889/are-managedbeans-obsolete-in-javaee6-because-of-named-in-cdi-weld) – Aquillo

+0

감사 Aquillo 및 Kolossus .. 링크를 살펴 보겠습니다. 지금 나에게 오류를 제공하여 help..but에 대한 – user1462933

답변

1
@ManagedBean(name = "procesos") 
@ViewScoped 
public class ProcesosBean implements Serializable { 
    @ManagedProperty(value="#{user}") // this references the @ManagedBean named user 
    private LoginBean loginBean; 

    private List<VistaProcesosEntity> procesos; 

    @PostConstruct 
    public void init(){ 
     UsariosEntity current = loginBean.getCurrent(); 
    } 
} 

나는 당신의 ProcesosBean 조금 드리고 있습니다. LoginBean을 참조하고 init() 함수에서 UsariosEntity을 검색하는 것에 유의하십시오. 더 이상 질문이 있거나 명확하지 않은 경우 (충분히) 질문하십시오.

+0

감사 .. "com.sun.faces.mgbean.ManagedBeanCreationException : 없음 그 자체 puede definir 라 propiedad procesos 파라 엘 콩 administrado의 procesos는" 영어 는 "같은 것을 말한다 – user1462933

+0

Ok, 'ProcesosBean'의 업데이트 된 버전으로이 문제에 대한 새로운 질문을 만들 수 있습니까? 여기에서 참조 할 수있어서 기꺼이 도와 드리겠습니다. Stackoverflow 및 그 질문의 미래의 가독 술을 위해서, 새로운 질문이 더 좋을 것입니다. – Aquillo

+0

http://stackoverflow.com/questions/16305825/com-sun-faces-mgbean-managedbeancreationexception-cannot-set-property-procesos - -> 새로운 질문이 있습니다 :) – user1462933

관련 문제