Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Ex.:
AppLoginModuleJAAS
Ex.:
br.pro.passos.security
br.pro.passos.security.principal
ModuloLoginJAAS {
br.pro.passos.security.LoginModuleJAASImpl required;
};
2) Passos para criar aplicativo web escrito em Java para testar o módulo de
autenticação e autorização
Ex.:
AppWebTestaJAAS
index.jsp
login.jsp
erroLogin.jsp
erro403.jsp
logout.jsp
cadastros.jsp
relatorios.jsp
<%
session.invalidate();
response.sendRedirect("index.jsp");
%>
Observe também que usamos o nome totalmente qualificado das classes que
representam os usuários e os papéis.
<login-config>
<auth-method>FORM</auth-method>
<realm-name>default</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/erroLogin.jsp</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<display-name>Política de segurança do sistema</display-name>
<web-resource-collection>
<web-resource-name>Protege todo o site</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>AUTENTICADO</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description>Papel requerido para acessar quaisquer recursos do aplicativo</description>
<role-name>AUTENTICADO</role-name>
</security-role>
<error-page>
<error-code>403</error-code>
<location>/erro403.jsp</location>
</error-page>
Se o usuário for autenticado, mas não tiver permissão, autorização, para acessar um
recurso, ocorrerá o erro 403, e a página erro403.jsp será exibida.
e) A organização das páginas JSP e dos arquivos XML do aplicativo deve ser com abaixo:
Classe UsuarioImplPrincipal.java
package br.pro.passos.security.principal;
import java.security.Principal;
Classe PapelImplPrincipal.java
package br.pro.passos.security.principal;
import java.security.Principal;
Classe LoginModuleJAASImpl.java
package br.pro.passos.security;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import br.pro.passos.security.principal.PapelImplPrincipal;
import br.pro.passos.security.principal.UsuarioImplPrincipal;
this.subject = subject;
this.callbackHandler = callbackHandler;
this.sharedState = sharedState;
this.options = options;
this.username = this.getUsername();
this.password = this.getPassword();
return this.loginComSucesso;
}
//sharedState.put("javax.security.auth.principal", this.usuarioPrincipal);
//sharedState.put("javax.security.auth.roles", this.perfilPrincipal);
this.commitComSucesso = true;
}
return this.commitComSucesso;
}
return true;
}
return true;
}
try {
this.callbackHandler.handle(this.callbacks);
} catch(IOException ie) {
throw new LoginException("Capturada IOException lançada pelo método
tratarCallbacks()");
} catch(UnsupportedCallbackException uce) {
throw new LoginException("Capturada UnsupportedCallbackException lançada pelo
método executarCallback()");
}
}
return j_username;
}
return j_password;
}
if (!subject.getPrincipals().contains(usuario)) {
subject.getPrincipals().add(this.usuario);
}
if (!subject.getPrincipals().contains(papel)) {
subject.getPrincipals().add(this.papel);
}
}
}
Página login.jsp
Página erroLogin.jsp
Página logout.jsp
<%
session.invalidate();
response.sendRedirect("index.jsp");
%>
Página erro403.jsp
Página index.jsp
Página cadastros.jsp
Página relatorio.jsp
5) Arquivos XML
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context auth="Container">
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="ModuloLoginJAAS"
userClassNames="br.pro.passos.security.principal.UsuarioImplPrincipal"
roleClassNames="br.pro.passos.security.principal.PapelImplPrincipal" />
</Context>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>AppWebTestaJAAS</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>default</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/erroLogin.jsp</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<display-name>Política de segurança do sistema</display-name>
<web-resource-collection>
<web-resource-name>Protege todo o site</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>AUTENTICADO</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description>Papel requerido para acessar quaisquer recursos do aplicativo</description>
<role-name>AUTENTICADO</role-name>
</security-role>
<error-page>
<error-code>403</error-code>
<location>/erro403.jsp</location>
</error-page>
</web-app>
6) Referências consultadas
JAAS Book
http://www.jaasbook.com/
Java Authentication and Authorization Service (JAAS) in Java 2, Standard Edition (J2SE) 1.4
http://java.sun.com/developer/technicalArticles/Security/jaasv2/
Java SE Security
http://java.sun.com/javase/technologies/security/
Tutorial do JAAS
http://guj.com.br/java.tutorial.artigo.184.1.guj