<!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="https://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;">
JBoss AS7: Security : Custom Login Modules
</h3>
<span style="margin-bottom: 10px;">
modified by <a href="https://community.jboss.org/people/olukas">Ondrej Lukas</a> in <i>PicketBox Development</i> - <a href="https://community.jboss.org/docs/DOC-17357">View the full document</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p>When you write your own custom login module (or Authorization Module or Audit Provider or Mapping Provider), then you have two choices as to where the class files exist in JBoss AS7.1</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><h2>Options</h2><h2></h2><ol><li style="text-align: start;"><p>Package them as part of your EE archives (such as WEB-INF/classes or WEB-INF/lib)</p></li><li style="text-align: start;">Place in a separate module in the modules directory of JBoss AS 7.1</li></ol><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="text-align: start;"><span>Option 1 is covered in </span><a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-16811" target="_blank">http://community.jboss.org/wiki/JBossAS7SecurityDomainModel</a></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="text-align: start;">Option 2 is described here with an example:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="text-align: start;">Assume we have a web application called form-auth.war  which utilizes form authentication. It is attached to the article.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="text-align: start;">It uses a security domain form-auth that will be defined in standalone/configuration/standalone.xml as follows:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-xml"> <span class="jive-xml-tag"><security-domain name="form-auth" cache-type="default"></span>
    <span class="jive-xml-tag"><authentication></span>
         <span class="jive-xml-tag"><login-module code="custom.MyLoginModule" flag="required" module="custom_module"></span>
              <span class="jive-xml-tag"><module-option name="usersProperties" value="users.properties"/></span>
              <span class="jive-xml-tag"><module-option name="rolesProperties" value="roles.properties"/></span>
         <span class="jive-xml-tag"></login-module></span>
    <span class="jive-xml-tag"></authentication></span>
<span class="jive-xml-tag"></security-domain></span>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>In the example, we have a custom login module called "custom.MyLoginModule" which resides in a custom jboss module called as custom_module.  The module attribute on the login-module xml element specifies where the login module code resides.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>CLI: security-domain can be created as follows:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">/subsystem=security/security-domain=form-auth:add
/subsystem=security/security-domain=form-auth/authentication=classic:add(login-modules=[{"code"=>"custom.MyLoginModule", "flag"=>"required", "module"=>"custom_module", "module-options"=>[("usersProperties"=>"users.properties"), ("rolesProperties"=>"roles.properties")]}])
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Note: You will have to download the attached custom_module.zip and unzip it in the modules directory of AS7.1</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">jboss-as-7.1.0.Alpha2-SNAPSHOT/modules$ ls -la
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 asm
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 ch
drwxrwxr-x.  5 anil anil 4096 Nov 16 14:53 com
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:57 custom_module
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 gnu
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 javaee
drwxrwxr-x. 25 anil anil 4096 Nov 16 14:54 javax
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 jline
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 juddi
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:53 net
drwxrwxr-x. 23 anil anil 4096 Nov 16 14:54 org
drwxrwxr-x.  3 anil anil 4096 Nov 16 14:54 sun
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span>If everything is ok, when you start AS7.1, then you should be able to access </span><a class="jive-link-external-small" href="http://localhost:8080/form-auth/" target="_blank">http://localhost:8080/form-auth/</a></p><p>Username: anil</p><p>Password: anil</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>The source code for <strong><em>"custom.MyLoginModule"</em></strong> login module is packaged in the jar of custom_module.zip.</p><p>It is also given here:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>package</b></font> custom;
 
<font color="navy"><b>import</b></font> javax.security.auth.login.LoginException;
<font color="navy"><b>import</b></font> org.jboss.security.auth.spi.UsersRolesLoginModule;
 
<font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> MyLoginModule <font color="navy"><b>extends</b></font> UsersRolesLoginModule <font color="navy">{</font>
 
<font color="navy"><b>public</b></font> <font color="navy"><b>boolean</b></font> login() <font color="navy"><b>throws</b></font> LoginException
<font color="navy">{</font>
      <font color="navy"><b>return</b></font> super.login();
<font color="navy">}</font>
<font color="navy">}</font>
</code></pre><h2></h2><h2>Things to remember</h2><ul><li style="text-align: start;">When you create your own module, <span style="text-decoration: underline;"><strong>do not forget to add dependency on "org.picketbox" and "javax.api" in the module.xml of your custom module</strong></span>.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><h2 style="text-align: start;"></h2><h2 style="text-align: start;">References</h2><ul><li style="text-align: start;"><a class="jive-link-external-small" href="https://issues.jboss.org/browse/AS7-2675" target="_blank">https://issues.jboss.org/browse/AS7-2675</a></li></ul></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Comment by <a href="https://community.jboss.org/docs/DOC-17357">going to Community</a></p>
        <p style="margin: 0;">Create a new document in PicketBox Development at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=102&containerType=14&container=2088">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>