2014-05-18 3 views
1

내 JAVA 웹 응용 프로그램에 로그인하려고 할 때 발생하는 오류를 디버그하려고합니다. 기둥에 문제가있는 것 같습니다. 여기에 스택 트레이스는 다음과 같습니다JBoss 양식 기반 인증 실패

여기
anager] (http--127.0.0.1-8080-4) Login failure: javax.security.auth.login.LoginE 
xception: PB00019: Processing Failed:Query failed 
     at org.jboss.security.auth.spi.DbUtil.getRoleSets(DbUtil.java:166) [pick 
etbox-4.0.6.final.jar:4.0.6.final] 
     at org.jboss.security.auth.spi.Util.getRoleSets(Util.java:158) [picketbo 
x-4.0.6.final.jar:4.0.6.final] 
     at org.jboss.security.auth.spi.DatabaseServerLoginModule.getRoleSets(Dat 
abaseServerLoginModule.java:265) [picketbox-4.0.6.final.jar:4.0.6.final] 
     at org.jboss.security.auth.spi.AbstractServerLoginModule.commit(Abstract 
ServerLoginModule.java:228) [picketbox-4.0.6.final.jar:4.0.6.final] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1 
.7.0_51] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:57) [rt.jar:1.7.0_51] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) [rt.jar:1.7.0_51] 
     at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_51] 
     at javax.security.auth.login.LoginContext.invoke(LoginContext.java:762) 
[rt.jar:1.7.0_51] 
     at javax.security.auth.login.LoginContext.access$000(LoginContext.java:2 
03) [rt.jar:1.7.0_51] 
     at javax.security.auth.login.LoginContext$4.run(LoginContext.java:690) [ 
rt.jar:1.7.0_51] 
     at javax.security.auth.login.LoginContext$4.run(LoginContext.java:688) [ 
rt.jar:1.7.0_51] 
     at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1. 
7.0_51] 
     at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:6 
87) [rt.jar:1.7.0_51] 
     at javax.security.auth.login.LoginContext.login(LoginContext.java:596) [ 
rt.jar:1.7.0_51] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.de 
faultLogin(JBossCachedAuthenticationManager.java:449) [picketbox-infinispan-4.0. 
6.final.jar:4.0.6.final] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.pr 
oceedWithJaasLogin(JBossCachedAuthenticationManager.java:383) [picketbox-infinis 
pan-4.0.6.final.jar:4.0.6.final] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.au 
thenticate(JBossCachedAuthenticationManager.java:371) [picketbox-infinispan-4.0. 
6.final.jar:4.0.6.final] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.is 
Valid(JBossCachedAuthenticationManager.java:160) [picketbox-infinispan-4.0.6.fin 
al.jar:4.0.6.final] 
     at org.jboss.as.web.security.JBossWebRealm.authenticate(JBossWebRealm.ja 
va:215) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final] 
     at org.apache.catalina.authenticator.FormAuthenticator.authenticate(Form 
Authenticator.java:280) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica 
torBase.java:381) [jbossweb-7.0.10.Final.jar:] 
     at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmC 
loserValve.java:50) [jboss-as-jpa-7.1.0.Final.jar:7.1.0.Final] 
     at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(Secu 
rityContextAssociationValve.java:154) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final] 

     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j 
ava:155) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j 
ava:102) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal 
ve.java:109) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav 
a:368) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java 
:877) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce 
ss(Http11Protocol.java:671) [jbossweb-7.0.10.Final.jar:] 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:93 
0) [jbossweb-7.0.10.Final.jar:] 
     at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51] 
Caused by: java.sql.SQLException: Column Index out of range, 2 > 1. 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) [mysql 
-connector-java-5.1.30.jar:] 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) [mysql- 
connector-java-5.1.30.jar:] 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) [mysql- 
connector-java-5.1.30.jar:] 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) [mysql- 
connector-java-5.1.30.jar:] 
     at com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:818 
) [mysql-connector-java-5.1.30.jar:] 
     at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:565 
1) [mysql-connector-java-5.1.30.jar:] 
     at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570) [mysq 
l-connector-java-5.1.30.jar:] 
     at org.jboss.jca.adapters.jdbc.WrappedResultSet.getString(WrappedResultS 
et.java:1338) 
     at org.jboss.security.auth.spi.DbUtil.getRoleSets(DbUtil.java:135) [pick 
etbox-4.0.6.final.jar:4.0.6.final] 
     ... 31 more 

내 보안 도메인입니다 :

 <security-domain name="product_app_realm"> 
      <authentication> 
       <login-module code="Database" flag="required"> 
        <module-option name="dsJndiName" value="java:/AuthorityDS"/> 
        <module-option name="principalsQuery" value="select password from product_database.users where username=?"/> 
        <module-option name="rolesQuery" value="select role from product_database.roles where username=?"/> 
       </login-module> 
      </authentication> 
     </security-domain> 

문제가있을 수 있습니다 어떤 생각, 내 보안 영역 설정에 문제가있는가? 문제의 근본 원인은 사용자 또는 역할 테이블에 내 열이있는 문제입니다.

답변

2

.

다음과 같은 준비된 명령문 쿼리는 select roles, RoleGroup PrincipalID =?에서와 같습니다. 지정되지 않은 경우 사용되는 정확한 prepared statement입니다.

select role, 'Roles' from product_database.roles where username=? 
에 쿼리를 변경

시도

1

rolesQuery은 두 개의 열을 검색합니다. JBoss는 두 번째 열 값이 Roles 인 레코드 만 사용합니다.

동일한 테이블을 사용하여 다른 "역할"을 JBoss에 사용 된 것과 함께 저장할 수 있습니다. 까다 롭지 만 모든 예제에서 그러한 열이 분명하게 나타납니다.

상세 정보 : 당신은 rolesQuery에서 두 값을 반환해야 http://docs.jboss.org/jbossas/getting_started/v2/startguide40/security.html