<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Problems with Custom DatabaseServerLoginModule Roles
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/bmsantos">Bruno Santos</a> in <i>JBoss Portal</i> - <a href="http://community.jboss.org/message/621524#621524">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>OK! My bad... forget about it!</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Something rather strange is happening to my custom database login module and I'm sure I'm missing something.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I have a class that inherits from DatabaseServerLoginModule. The login method is overwritten and in here, the parent login method is always called. If the login failed then the class tries to login using LDAP. If LDAP succeeds to validate the user credentials then it sets the loginOk flag to true.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Now, if the user is successfully validated against the parent login DB method the getRoleSets method gets called and the roles returned. If the user fails to be validated against DB but it is successfully validated against the LDAP server, the same roles are returned but somehow I'm never able to get receive it at the other end of the application.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>protected</b></font> Group[] getRoleSets() <font color="navy"><b>throws</b></font> LoginException <font color="navy">{</font>
&#160;&#160;&#160;&#160; String name = getUsername();
&#160;
&#160;&#160;&#160;&#160; Group[] groups = <font color="navy">{</font><font color="navy"><b>new</b></font> SimpleGroup(<font color="red">"Roles"</font>)<font color="navy">}</font>;
&#160;&#160;&#160;&#160; <font color="navy"><b>try</b></font> <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Principal principal;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; principal = this.createIdentity(<font color="red">"ADMIN"</font>);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; groups[0].addMember(principal);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; principal = this.createIdentity(<font color="red">"USER"</font>);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; groups[0].addMember(principal);
&#160;
&#160;&#160;&#160;&#160; <font color="navy">}</font> <font color="navy"><b>catch</b></font>(Exception ee) <font color="navy">{</font><font color="navy">}</font>
&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> groups;
<font color="navy">}</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So, basically the difference is that if in the login method the super.login() succeeds, then everything ends up working and the necessary credentials are received as expected. If it fails I never get the credentials even though the loginOk flag is set and the getRolesSet method is called. Through the debugger I've noticed that the Identity gets created as expected. Still, I'm missing something...</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I've looked for the base source code (DatabaseServerLoginModule and up) but I could not find it for JBoss AS 6 and I'm stuck right now. I did find older versions and from it I could not really understand why this is not working.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>--- Update: Just override the commit() method in order to find what the subject.getPrincipals() gets set with and it happens that in both cases the subject does contain the necessary info to proceed:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java">@Override
<font color="navy"><b>public</b></font> <font color="navy"><b>boolean</b></font> commit() <font color="navy"><b>throws</b></font> LoginException <font color="navy">{</font>
&#160;&#160;&#160;&#160; <font color="navy"><b>boolean</b></font> b = super.commit();
&#160;&#160;&#160;&#160; Set&lt;Principal&gt; pList = subject.getPrincipals(); <font color="darkgreen">// Returns [admin, Roles(members:ADMIN,USER)] for DB login and [bsantos, Roles(members:ADMIN,USER)] for LDAP login.</font>
&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> b;
<font color="navy">}</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>This confirms that the issue is somewhere in a failed login method.</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/621524#621524">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Portal at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2011">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>