2017-10-19 61 views
0

Je souhaite utiliser la sécurité de printemps. Mais je reçois SQLException. Je n'ai toujours pas trouvé de solution.Spring Security - Exception d'index de colonne non valide

Mes structures de table:

APP_USER (ID_APP_USER, NOM, MOT DE PASSE)

APP_ROLE (ID_ROLE, NOM)

APP_USER_ROLE (ID_USER_ROLE, ID_USER, ID_ROLE)

Mon Fichier de configuration de ressort:

<!-- enable use-expressions --> 
<http auto-config="true" use-expressions="true"> 

    <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" /> 

    <!-- access denied page --> 
    <access-denied-handler error-page="/403" /> 

    <form-login 
     login-page="/login" 
     default-target-url="/index" 
     authentication-failure-url="/login?error" 
     username-parameter="username" 
     password-parameter="password" /> 
    <logout logout-success-url="/login?logout" /> 
    <!-- enable csrf protection --> 
    <csrf/> 
</http> 

<!-- Select users and user_roles from database --> 
<authentication-manager> 
    <authentication-provider> 
    <jdbc-user-service data-source-ref="dataSource" 
     users-by-username-query= 
     "select name as username,password from app_user where name=?" 
     authorities-by-username-query= 
     "SELECT app_user.name as username, app_role.name as role 
      FROM app_user 
      INNER JOIN app_user_role ON app_user.id_app_user = app_user_role.id_user 
      INNER JOIN app_role ON app_user_role.id_role = app_role.id_role 
      WHERE app_user.name = ? " /> 
    </authentication-provider> 
</authentication-manager> 

Et je reçois l'erreur suivante:

20: 36: 55,281 [http-nio-8089-exec-10] DEBUG osjsSQLErrorCodeSQLExceptionTranslator - Traduction SQLException avec l'état SQL '99999', erreur code '17003', message [Index de colonne invalide]; SQL était [sélectionnez le nom comme nom d'utilisateur, mot de passe de app_user où name =?] Pour la tâche [PreparedStatementCallback] 20: 36: 55.282 [http-nio-8089-exec-10] DEBUG osswaUsernamePasswordAuthenticationFilter - Échec de la demande d'authentification: org.springframework. security.authentication.AuthenticationServiceException: PreparedStatementCallback; l'accès ResultSet invalide pour SQL [sélectionnez le nom comme nom d'utilisateur, mot de passe de app_user où name =?]; l'exception imbriquée est java.sql.SQLException: index de colonne non valide 20: 36: 55.282 [http-nio-8089-exec-10] DEBUG osswaUsernamePasswordAuthenticationFilter - SecurityContextHolder mis à jour pour contenir l'authentification null 20: 36: 55.282 [http-nio- 8089-exec-10] DEBUG osswaUsernamePasswordAuthenticationFilter - Délégation à l'authentification gestionnaire d'échec org.springframework.se[email protected]2f483b1e~~V~~singular~~3rd 20: 36: 55,282 [http-nio-8089-exec-10] DEBUG osswaSimpleUrlAuthenticationFailureHandler - Redirection à/login erreur 20: 36: 55,282 [http-nio-8089-exec-10] DEBUG ossweb.DefaultRedirectStrategy - Réorienter à '?/FNDWEB/login error'

Qu'est-ce que est faux? s'il vous plaît aidez-moi:/Merci d'avance.

Répondre

1

Enfin, j'ai trouvé une solution. Nous devons ajouter ", 1 comme activé" à notre requête.

<authentication-provider> 
    <jdbc-user-service data-source-ref="dataSource" 
     users-by-username-query= 
     "select name as username,password,1 as enabled from app_user where name=?" 
     authorities-by-username-query= 
     "SELECT app_user.name as username, app_role.name as role 
      FROM app_user 
      INNER JOIN app_user_role ON app_user.id_app_user = app_user_role.id_user 
      INNER JOIN app_role ON app_user_role.id_role = app_role.id_role 
      WHERE app_user.name = ? " /> 
    </authentication-provider>