He probado los contenedores de seguridad predeterminados en Glassfish 3.0.1 y he llegado a la conclusión de que no dedicaré más tiempo a eso. En cambio, quiero controlar la verificación yo mismo. Pero necesito alguna guía para ponerme en el buen camino.Controlar programáticamente el inicio de sesión con Servlet 3.0
Por el momento tengo un UserBean que tiene una función de inicio de sesión/cierre de sesión (ver a continuación). Y no quiero usar el contenedor integrado * j_security_check *, pero use el núcleo JSF 2.0.
Mis preguntas son;
- ¿Necesito un ServletFilter para redirigir el tráfico si el usuario no está conectado (si tiene acceso a ciertas carpetas)?
- ¿Cómo almaceno User Pricipals después de que el usuario inició sesión correctamente?
Aprecie cualquier ayuda o enlace a un ejemplo, saludos Chris.
PS. Perdón por la agrupación de dos preguntas juntas
@ManagedBean
@SessionScoped
public class UserBean {
private AuthenticateUser authenticateUser;
...
public String login() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
JsfUtil.log("Username : " +authenticateUser.getUserName());
JsfUtil.log("Password : " +authenticateUser.getPassword());
AuthenticateUser authRequest = authenticationFacade.find(authenticateUser);
try {
if(!authRequest.equals(authenticateUser))
return "/loginError";
request.login(authenticateUser.getUserName(), authenticateUser.getPassword());
return "";
} catch(ServletException e){
JsfUtil.addErrorMessage(e, "Incorrect username or password, please try again.");
return "/loginError";
}
...
public String logOut() {
String result = "/index?faces-redirect=true";
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.logout();
} catch (ServletException e) {
JsfUtil.log("Failed to logout user!" +e.getRootCause().toString());
result = "/loginError?faces-redirect=true";
}
return result;
}
Gracias por la súper rápida respuesta. Tal vez no es prudente no usar un dominio del contenedor de la aplicación. Pero tropecé con la patrulla, cuando traté de usar la estructura/diseño de mi mesa. Se siente como una gran caja negra con el reino contenedor. Pero con ServletFilter aún puedo restringir todo el acceso a la raíz y otras carpetas. Así que lo intentaré mañana. Gracias de nuevo. – Chris
De nada. – BalusC