Boa tarde galera,
estou com um pequeno problema em relação a definir acesso ao usuário…
o que estou precisando é de que se eu digitar a URL da pagina home aparecer a tela de login… só aparecer a home se o usuário digitou o login e a senha certa…
eu consigo validar o login e a senha e passar para a pagina home…
mas se o usuário digitar a URL da pagina home ele não precisa logar… isso é mau… rsss.
agradeço desde já.
Ou você implementa JAAS ou usa Spring Security ou alguma ferramenta assim…
drsmachado obrigado por responder…
Não uso nata… esta tudo na unha…
fico no aguardo!
Então será bem difícil fazer algo.
Se fosse Struts 2, ainda seria possível implementar um interceptor, mas, neste caso, é bem mais trabalhoso.
Isso, por que, cada página que ele acesse (URL) terá de ter um tratamento referente à login.
Voce pode fazer de diversas formas.
Creio que a mais facil seria ao montar a arvore de componentes, executar alguma acao que checa se o usuario esta logado ou nao.
Exemplo
http://www.mkyong.com/jsf2/jsf-2-prerenderviewevent-example/
Isso atende o que precisa =D
renanpto Obrigado por responder.
Tentei fazer igual a ele para testar…
Segue a código do meu bean
[code]public void isAdmin(ComponentSystemEvent event) throws SQLException{
FacesContext fc = FacesContext.getCurrentInstance();
if (!getLogin().equals(fc.getExternalContext().getSessionMap().get(resultSet.getString(1)))){
ConfigurableNavigationHandler nav
= (ConfigurableNavigationHandler)
fc.getApplication().getNavigationHandler();
nav.performNavigation("login");
}
} [/code]
chamando da minha index.xhtml:
e nada aconteceu… tem alguma idéia o pq?
Agradeço desde já…
Isto
<f:event listener="#{teste.isAdmin}" type="preRenderView" />
Está dentro da tag <f:metadata>?
Obrigado por responder rápido…
não está fiz exatamente igual a ele…
Bom, eu sempre uso desta maneira
<html...>
<h:head>
<f:metadata>
<f:event listener="" type="preRenderView"/>
</f:metadata>
</h:head>
opa melhorou…
agora ta saindo o seguinte erro.
javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
Só estas duas linhas de stackTrace, sei…
Esse é só o exeption…
Todo o erro:
com.teste.ProjetoTeste.jdbc.Teste.isAdmin(Teste.java:97)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.el.parser.AstValue.invoke(AstValue.java:258)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
com.sun.faces.facelets.tag.jsf.core.DeclarativeSystemEventListener.processEvent(EventHandler.java:131)
javax.faces.component.UIComponent$ComponentSystemEventListenerAdapter.processEvent(UIComponent.java:2486)
javax.faces.event.SystemEvent.processListener(SystemEvent.java:106)
com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2161)
com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(ApplicationImpl.java:2109)
com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:289)
com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:247)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
Boa madrugada drsmachado,
Eu ainda aqui tentando. Hehehe.
Bom vamos lá, a seu conselho fui pesquisar um pouco de JAAS…
Gostei muito e estou quase terminando, porem ( à sempre um porem né ), estou com um probleminha…
Se eu digitar a url do index.xhtml vai para tela de login… até ai maravilha era oque eu queria, eu estou digitando o login e a senha correto e não esta indo para o index…
Lembrando que estou usando JBoss EAP 6.1
tenho um banco chamado teste nele tenho uma tabela chamada user e tem as seguintes colunas:
userID: chave primario
userName
password
permissao
Bom vamos ao meu context.xml:
[code]
<?xml version="1.0" encoding="UTF-8"?>
[/code]
Meu web.xml:
[code]
<?xml version="1.0" encoding="UTF-8"?>
<display-name>TesteUsuário</display-name>
<welcome-file-list>
<welcome-file>login.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Consulta Estatistica</web-resource-name>
<url-pattern>/index.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
[/code]
Meu login.xhtml:
[code]
TesteUsuario
<h:body>
<h:form prependId="false">
<p:spacer height="250px" />
<p:panel header="Bem-Vindo(a)"
style="width:500px;margin-left:auto;margin-right:auto;
border: 1px solid #000000;box-shadow:10px 10px 5px black;">
<p:messages id="messages" showDetail="true" autoUpdate="true"
closable="true" />
<h:panelGrid columns="2" style="margin-left:auto;margin-right:auto;">
<h:outputLabel value="Usuário:" />
<p:inputText value="#{login.login}" />
<h:outputLabel value="Senha:" />
<p:password value="#{login.password}" />
</h:panelGrid>
<h:panelGrid columns="2" style="margin-left:auto;margin-right:auto;">
<p:commandButton type="submit" id="login" value="Entrar"
action="#{login.logar}" ajax="false" />
<p:commandButton id="clear" value="Limpar Campos" action="erro"
ajax="false" />
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
[/code]
E por fim meu Bean:
import javax.faces.context.FacesContext;
import javax.faces.bean.ManagedBean;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ManagedBean
public class Login {
private String login;
private String password;
public String logar() {
try {
this.getRequest().login(this.login, this.password);
return "index?faces-redirect=true";
} catch (ServletException e) {
return null;
}
}
public String sair() throws ServletException {
this.getRequest().logout();
return "Login?faces-redirect=true";
}
private HttpServletRequest getRequest() {
FacesContext context = FacesContext.getCurrentInstance();
return (HttpServletRequest) context.getExternalContext().getRequest();
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Agradeço desde já sua paciência.
Só para ficar mais claro…
O context.xml ta com o seguinte WARN: No grammar constraints (DTD or XML Schema) referenced in the document. no cabeçalho…
Qualquer dica é bem vinda
Fico no aguardo.
[quote=rafael.kbeca]Só para ficar mais claro…
O context.xml ta com o seguinte WARN: No grammar constraints (DTD or XML Schema) referenced in the document. no cabeçalho…
Qualquer dica é bem vinda
Fico no aguardo.[/quote]
mude o método de login para:
try {
this.getRequest().login(this.login, this.password);
return "index?faces-redirect=true";
} catch (ServletException e) {
e.printStackTrace() // nunca omita a stackTrace. caso não queira mostrá-la ao usuário (o que é péssimo), nem queira deixá-la no console do servidor, use um Logger.
return null;
}
qual a stackTrace?
Boa tarde,
saiu o seguinte erro:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread “main”
Porem tive que criar um main dentro desta classe para aparecer o erro.
[quote=rafael.kbeca]Boa tarde,
saiu o seguinte erro:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
...
Exception in thread "main"
Porem tive que criar um main dentro desta classe para aparecer o erro.[/quote]
Você “teve” que criar um método main num ManagedBean? Muito suspeito. Tem alguma coisa errada aí.
Primeiro, algo que não perguntei antes de lhe falar para mudar o método de login: Você depurou o depurou passo-a-passo? Cai no catch?
Bom agora que você mencionou vi algo bem estranho…
Quando eu executo o projeto com o main sem estar chamando nada… o simples fato de ele existir da o mesmo erro…
Outra coisa… parece que essa configuração é para o toncat e estou usando o JBoss…
Essa configuração que fiz serve para o jBoss tbm?
[quote=rafael.kbeca]Bom agora que você mencionou vi algo bem estranho…
Quando eu executo o projeto com o main sem estar chamando nada… o simples fato de ele existir da o mesmo erro…
Outra coisa… parece que essa configuração é para o toncat e estou usando o JBoss…
Essa configuração que fiz serve para o jBoss tbm?[/quote]
A configuração do web.xml e programação do ManagedBean e página são independentes de servidor. Mas a do Realm não serve, não. Cada servidor tem a sua.
https://docs.jboss.org/author/display/AS71/Security+Realms
https://community.jboss.org/thread/175865