Aplicaciones FundeWeb 1.x
Si estás trabajando con una aplicación FundeWeb 1.x debes leer la guía ...
Pasos a seguir en aplicaciones FundeWeb 2.0
Para poder aplicar estos cambios en tu aplicación necesitas FundeWeb IDE 2.0 o 2.1.
Hay que modificar o añadir las siguientes carpetas y ficheros:
AuthenticationManagerBean.java
- Asegurar que AuthenticationManagerBean extiende la clase AbstractAuthenticationManagerBean.
- Añadir los métodos de autenticación validos que ofrece el SSO.
Este es un ejemplo en el que solo admitimos la autenticación mediante correo del SSO para acceder a la aplicación:
package es.um.atica.XXXX.security.authentication;
...
import es.um.atica.seam.security.authentication.method.SSOAuthenticationMethods;
@Name( "authenticationManagerBean" )
@Scope( SESSION )
@Install( precedence = FRAMEWORK )
@BypassInterceptors
@Startup
public class AuthenticationManagerBean extends AbstractAuthenticationManagerBean {
// Declaracion de los metodos de autenticacion validos por SSO
private static final SSOAuthenticationMethods[] VALIDS_SSO_AUTHENTICATION_METHODS = {
SSOAuthenticationMethods.SSO_CORREO
};
...
// Forma de hacer accesible los metodos de autenticacion validos por SSO
@Factory( SSOAuthenticationMethods.SSO_AUTHENTICATION_METHODS_COMPONENT_NAME )
public SSOAuthenticationMethods[] getValidsSSOAuthenticationMethods() {
return VALIDS_SSO_AUTHENTICATION_METHODS;
}
}
Sino se usa la anotación @Factory, podemos declarar la factoría en el fichero components.xml:
<factory name="es.um.atica.security.authentication.ssoAuthenticationMethods" method="#{authenticationManagerBean.getValidsSSOAuthenticationMethods}"/>
AuthenticatorAction.java
- Asegurar que AuthenticationAction extiende la clase AbstractAuthenticationAction.
La clase normalmente, suele parecerse al siguiente ejemplo:
package es.um.atica.apium.security.authentication;
import static org.jboss.seam.annotations.Install.FRAMEWORK;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
import es.um.atica.seam.security.authentication.AbstractAuthenticationManagerBean;
import es.um.atica.seam.security.authentication.AbstractAuthenticatorAction;
@Name( "authenticator" )
@Install( precedence = FRAMEWORK )
@BypassInterceptors
public class AuthenticatorAction extends AbstractAuthenticatorAction {
private static final Log LOG = Logging.getLog( AuthenticatorAction.class );
@Override
protected AbstractAuthenticationManagerBean getAuthenticationManagerBean() {
return AuthenticationManagerBean.instance();
}
/*
* (non-Javadoc)
* @see es.um.atica.util.FundeWebManagerBean#getLog()
*/
@Override
protected Log getLog() {
return LOG;
}
}
pages.xml
Añadir la siguiente regla de navegación al final de la declaración de <page view-id="*">:
<navigation from-action="#{identity.relogByCAS}">
<redirect url="https://${cas.server.url}.um.es/cas/logout?service=https://${cas.application.url}/#{request.contextPath}" />
</navigation>
Añadir la siguiente excepción:
<exception class="es.um.atica.seam.security.authentication.exceptions.AuthenticationMethodNotSupportedException">
<redirect view-id="/fundeweb/error_auth_method.xhtml">
<message severity="error">#{messages['es.um.atica.security.authentication.AuthenticationMethodNotSupportedException']}</message>
</redirect>
</exception>
Modificar la excepción para la clase org.jboss.seam.security.AuthorizationException:
<exception class="org.jboss.seam.security.AuthorizationException">
<redirect view-id="/fundeweb/error_no_auth.xhtml">
<message severity="error">#{messages['org.jboss.seam.security.AuthorizationException']}</message>
</redirect>
</exception>