사용자 로그인과 로그인 필터를 관리하기 위해 세션 범위가있는 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;
}
[@ManagedProperty annotation을 통해 전체 관리 빈을 주입하는 방법?] (http://stackoverflow.com/questions/5165567/how-to-inject-entire-managed-bean-via-managedproperty-annotation) – kolossus
@ 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
감사 Aquillo 및 Kolossus .. 링크를 살펴 보겠습니다. 지금 나에게 오류를 제공하여 help..but에 대한 – user1462933