Comment puis-je obtenir de la demande.méthode d'ouverture de session de travail avec un jdbcRealm?

Je suis en train d'utiliser la Servlet 3.0 demande.login(nom d'utilisateur, mot de passe) méthode de travail avec un jdbcRealm, mais quelque chose semble incorrect. Il existe de nombreux articles sur la façon d'obtenir le jdbcRealm de travail avec le FORMULAIRE d'authentification, et beaucoup sur la façon d'utiliser la nouvelle demande.méthode de connexion, mais je n'ai pas vu de montrer que les deux travaillent ensemble.

Serveur D'Applications GlassFish 3.1.2

L'IDE Netbeans 7.3

SGBDR: SQL Server 2008 R2

JDBC - Microsoft JDBC 4.0 pilote

J'apprécierais un peu d'assistance de la communauté sur la façon d'obtenir ce travail. Merci à l'avance!

D'abord, je suis l'envoi d'un appel ajax jquery dans mon SignInService servlet. Je suis d'encodage du mot de passe à l'aide de la jsSHA bibliothèque en SHA-512 avant de l'envoyer:

var encodedPassword = new jsSHA($("#omSignInPassword").val(), "TEXT");

$.ajax({
      url: "SignInService",
      data: {
        username : $("#SignInUserName").val(),
        password : encodedPassword.getHash("SHA-512", "HEX")
      }
...
});

C'est ce que google Chrome montre est adressé:

username:admin
password:b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86

La servlet prend juste les paramètres de la requête et tente de se connecter:

  username = request.getParameter(PARAM_USERNAME);
  password = request.getParameter(PARAM_PASSWORD);

  request.login(username, password);

Ce sont les erreurs que je vois dans la GlassFish console:

SÉVÈRE: jdbcrealm.invaliduserreason AVERTISSEMENT: WEB9102: Web Échec de la Connexion: com.soleil.de l'entreprise.de sécurité.auth.connexion.commun.LoginException: échec de la Connexion: l'Exception de Sécurité

SÉVÈRE: Servlet Exception: javax.servlet.ServletException: Exception levée lors de la tentative d'authentification pour l'utilisateur: admin

AVERTISSEMENT: DPL5032:Une méthode d'authentification n'a pas été défini dans le web.xml descripteur. L'aide de BASE par défaut pour la connexion de configuration.

AVERTISSEMENT: Aucun des Directeurs mappé à un Rôle [Utilisateur].

Maintenant, à la configuration...

Voici mon web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <login-config>
        <realm-name>omRealm</realm-name>
    </login-config>
    <security-role>
        <description/>
        <role-name>User</role-name>
    </security-role>
</web-app>

Table Utilisateur:

CREATE TABLE [OM_SECURITY].[User](
    [UserID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](32) NOT NULL,
    [Password] [char](128) NOT NULL,
    [LastName] [nvarchar](32) NULL,
    [FirstName] [nvarchar](32) NULL,
    [Email] [nvarchar](64) NULL
) ON [PRIMARY]

Un enregistrement existe dans ce tableau:

1   admin   B109F3BBBC244EB82441917ED06D618B9008DD09B3BEFD1B5E07394C706A8BB980B1D7785E5976EC049B46DF5F1326AF5A2EA6D103FD07C95385FFAB0CACBC86    NULL    NULL    NULL

(le mot de passe est "password" pour l'instant)

Ici est le point de Vue utilisé pour mettre chaque utilisateur dans le groupe "User". C'est très basique et va changer plus tard une fois que j'ai la fonctionnalité de base en place. Je ne prévoyez pas d'utiliser JAAS Rôles que mes exigences de la demande semble être beaucoup plus complexe que ce qu'ils fournissent. C'est probablement une autre discussion, à moins d'une certaine manière cela a un impact sur l'authentification:

CREATE VIEW [OM_SECURITY].[SignInGroup]
AS
SELECT     'User' AS GroupName, Name AS UserName
FROM         OM_SECURITY.[User]

Le pool de connexion a été testé et il fonctionne très bien. Le Domaine a été mis en place dans le server-config section et non pas la valeur par défaut-config.

JAAS Context:  jdbcRealm
JNDI:  jdbc/omSecurity
User Table:  OM_SECURITY.User
User Name Column:  Name
Password Column:  Password
Group Table:  OM_SECURITY.SignInGroup
Group Table User Name Column:   UserName
Group Name Column:  GroupName
Assign Groups: (blank)
Database User:  (blank)
Database Password:  (blank)
Digest Algorithm: SHA-512
Password Encryption Algorithm:  AES
Encoding: Hex
Charset: (blank)

Si quelqu'un peut me dire ce fichier stocke le Domaine de Connexion et de configuration de Pool, je vais poster ici en tant que XML à la place.

Cela a également été affiché sur le GlassFish forum ici:

http://www.java.net/forum/topic/glassfish/glassfish-webtier/using-servlet-requestlogin-jdbcrealm

Mise à jour: je viens de déposer un rapide basée sur un formulaire de connexion et il est également défaut, de sorte que le problème semble être à mon royaume. J'ai ajusté le niveau de journal pour:

Configurations\

server-config\

Logging\

Journal Des Niveaux\

javax.de l'entreprise.système.de base.sécurité = FIN

ET

com.microsoft.sqlserver.jdbc = FIN

La requête est en cours d'exécution fine selon SQL Server, il n'y a pas des exceptions générées à partir d'un Pool de Connexion:

FINE: SQLServerPreparedStatement:3: calling sp_prepexec: PreparedHandle:0, SQL:SELECT Password FROM omUser WHERE Name = @P0 
checkout ce tutoriel nabisoft.com/tutorials/glassfish/...
Si c'était une réponse, je voudrais marquer "correct"

OriginalL'auteur Graham | 2012-11-04