You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
This article will cover setting up JAAS with the existing jmx-console security policy.
Open up components.xml and modify the default:
<security:identity authenticate-method="#{authenticator.authenticate}"
security-rules="#{securityRules}"
remember-me="true"/>
To:
<security:identity jaas-config-name="jmx-console" remember-me="true"/>
Remember that the authenticate-method and jaas-config-name are mutually exclusive, if you have one, you can't have the other. Setting jaas-config-name to jmx-console tells Seam to authenticate against the following security policy in JBoss:
<!-- A template configuration for the jmx-console web application. This
defaults to the UsersRolesLoginModule the same as other and should be
changed to a stronger authentication mechanism as required.
-->
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag = "required">
<module-option name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>
Where the jmx-console-users.properties is:
# A sample users.properties file for use with the UsersRolesLoginModule admin=admin
And jmx-console-roles.properties is:
# A sample roles.properties file for use with the UsersRolesLoginModule admin=JBossAdmin,HttpInvoker
Now deploy your project and go to the home page and login. Login with admin/admin and you'll see:
Welcome, admin
That was simple enough, now let's see if the roles are there, on the home.seam page add:
<rich:panel>
<f:facet name="header">Security information</f:facet>
Identity principle: #{identity.principal} <br />
Identity subject: #{identity.subject} <br />
<h:outputText value="Display when user has the JBossAdmin roll" rendered="#{s:hasRole('JBossAdmin')}" /> <br />
<h:outputText value="Display when user has the Employee roll (Which isn't defined)" rendered="#{s:hasRole('Employee')}" />
</rich:panel>
Redeploy or reexplode, now login again if necessary on the home page, you will now see:
Identity principle: admin Identity subject: Subject: Principal: admin Principal: Roles(members:JBossAdmin,HttpInvoker) Display when user has the JBossAdmin roll
From this point, you can begin integrating other JAAS security policies and writing your own.