[RESOLVIDO] HTTP Status 400 - Invalid direct reference to form login page utilizando JAAS

4 respostas
S

Ta difícil essa implementação com JAAS....acredito que a autenticação esta correta pois quando coloco os dados incorretos, sou encaminhado para a página de erro, mas quando os dados estão corretos, encontro esse erro e simplesmente não aparece nada no log do jboss.

Utilizo JBOSS 5.

Alguém saberia o que esta acontecendo?

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>CertificadoDigital-web</display-name>
  
   <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  
  <context-param>   
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>true</param-value>
  </context-param>
  
   <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <session-config>
    <session-timeout>-1</session-timeout>
  </session-config>
  <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>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>
  <context-param>  
    <param-name>primefaces.THEME</param-name>  
    <param-value>cruze</param-value>  
</context-param> 

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Users</web-resource-name>
            <url-pattern>/pages/private/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>USER</role-name>
        </auth-constraint>
    </security-constraint> 
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>        
            <form-login-page>/pages/public/login.xhtml</form-login-page>
            <form-error-page>/pages/public/loginError.xhtml</form-error-page>
        </form-login-config>
    </login-config> 
    <security-role>
        <role-name>USER</role-name>
    </security-role>    
 
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>br.com.certificado.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/pages/private/*</url-pattern>
    </filter-mapping>   

	<filter>  
	    <filter-name>PrimeFaces FileUpload Filter</filter-name>  
	    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>  
	</filter>  
	<filter-mapping>  
	    <filter-name>PrimeFaces FileUpload Filter</filter-name>  
	    <servlet-name>Faces Servlet</servlet-name>  
	</filter-mapping>    
</web-app>
jboss-web
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <!-- Links with JBoss the Realm to use -->
    <security-domain>java:/jaas/LoginCertRealm</security-domain>
</jboss-web>
login-config
<application-policy name="LoginCertRealm">
		<authentication>
			<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
				<module-option name="dsJndiName">java:/LoginCertDS</module-option>
				<module-option name="principalsQuery">select password from profile where username=?</module-option>
				<module-option name="rolesQuery">select rolename, 'Roles' from user_roles where username=?</module-option>
			</login-module>
		</authentication>
	</application-policy>
-ds
<datasources>
  <local-tx-datasource>
    <jndi-name>LoginCertDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/ejbca</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>	
	<driver>mysql-connector-java-5.1.15.jar</driver>
    <user-name>root</user-name>
    <password>root</password> 
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

Mudei o nível do log e peguei isso:

2013-04-24 16:48:17,989 DEBUG [org.apache.catalina.connector.CoyoteAdapter] (http-127.0.2.1-8080-2)  Requested cookie session id is 286143D134D3DF30D754EE612317B3E9
2013-04-24 16:48:17,989 DEBUG [org.apache.catalina.authenticator.AuthenticatorBase] (http-127.0.2.1-8080-2) Security checking request POST /CertificadoDigital-web/pages/public/j_security_check
2013-04-24 16:48:17,989 DEBUG [org.apache.catalina.authenticator.FormAuthenticator] (http-127.0.2.1-8080-2) Authenticating username 'MPFontana'
2013-04-24 16:48:17,995 DEBUG [org.apache.catalina.authenticator.FormAuthenticator] (http-127.0.2.1-8080-2) Authentication of 'MPFontana' was successful
2013-04-24 16:48:17,995 DEBUG [org.apache.catalina.authenticator.FormAuthenticator] (http-127.0.2.1-8080-2) Redirecting to original 'null'
2013-04-24 16:48:17,996 DEBUG [org.apache.catalina.authenticator.AuthenticatorBase] (http-127.0.2.1-8080-2)  Failed authenticate() test ??/CertificadoDigital-web/pages/public/j_security_check
2013-04-24 16:48:18,404 DEBUG [org.apache.catalina.session.ManagerBase] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Start expire sessions StandardManager at 1366832898404 sessioncount 0
2013-04-24 16:48:18,404 DEBUG [org.apache.catalina.session.ManagerBase] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) End expire sessions StandardManager processingTime 0 expired sessions: 0
2013-04-24 16:48:18,404 DEBUG [org.apache.catalina.session.ManagerBase] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Start expire sessions StandardManager at 1366832898404 sessioncount 0
2013-04-24 16:48:18,404 DEBUG [org.apache.catalina.session.ManagerBase] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) End expire sessions StandardManager processingTime 0 expired sessions: 0

Redirecting to original 'null', o que seria isso?

4 Respostas

T

por isso

<url-pattern>*.xhtml</url-pattern> <url-pattern>*.jsp</url-pattern>

deixe apenas um que no caso, seria esse

ou

o erro não é isso

S

tmvolpato:
por isso

<url-pattern>*.xhtml</url-pattern> <url-pattern>*.jsp</url-pattern>

deixe apenas um que no caso, seria esse

ou

o erro não é isso

Como assim o erro não é isso? Foi exatamente isso!

Obrigado camarada! Nem imaginaria que por uma bobeira dessa eu iria ter esse problema. O problema é que em diversos livros e tutoriais, o autor deixa diversas patterns declaradas, podendo gerar esse tipo de erro, o qual encontrei diversos usuários na rede na mesma situação só que sem solução.

T

aquilo estava errado
mas não pensei que o erro poderia ser aquilo
pq não conheço JAAS

flw

S

tmvolpato:
aquilo estava errado
mas não pensei que o erro poderia ser aquilo
pq não conheço JAAS

flw

Estava eu aqui lendo e relendo algumas coisas e descobri o real erro disso, o que não tem nada a ver com isso, é o seguinte.

O JAAS, quando autenticado (user and password validos), internamente vc não configura qual a página que vc deverá ser encaminhado, então o que acontece é o seguinte, o JAAS encaminha para a ultima página que vc acessou, e necessariamente deverá ser a que vc esta tentando acessar (os recursos protegidos). Ou seja, eu estava encaminhando no meu index.xhtml para a própria página de login, então quando eu autenticava o usuário, o JAAS me encaminhava para a própria página de login, ocasionando o erro. O que eu fiz? Simplesmente alterei a página do index.xhtml para a página que devo ser encaminhado quando logar, mas como no primeiro acesso eu não estou autenticado, serei encaminhado para página de login.

Criado 24 de abril de 2013
Ultima resposta 25 de abr. de 2013
Respostas 4
Participantes 2