The jkniv-jaas-tomcat implements a hybrid realm for authentication and authorization model from JavaTM Authentication and Authorization Service to Tomcat server.
Maven users will need to add the following dependency to their pom.xml for this component:
<dependency> <groupId>net.sf.jkniv</groupId> <artifactId>jkniv-jaas-tomcat</artifactId> <version>0.3.1</version> </dependency>
Copy the jar files jkniv-jaas-tomcat.jar to common lib tomcat-install/lib from Tomcat:
Create new file tomcat-install/conf/login.conf to config the hybridRealm. The name hybridRealm must be the same value from appName attribute <Realm appName="hybridRealm" in server.xml.
hybridRealm {
net.sf.jkniv.jaas.tomcat.HybridLoginModule required
authe-ldap=false
authe-jdbc=true
datasource-jndi="java:/comp/env/jdbc/myDataSource"
user-table=AUTH_USER
user-name-column =USERNAME
user-password-column =PASSWD
group-table =AUTH_GROUP
group-name-column =GROUP_ID
group-table-user-name-column=USERNAME
assign-groups=auth;
};
Note: Config file from JAAS treat slash as comments, so to config JNDI name from datasource put the key between double quotes like "java:/comp/env/jdbc/myDataSource"
<Engine defaultHost="localhost" name="Catalina">
...
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="hybridRealm"
userClassNames="net.sf.jkniv.jaas.tomcat.UserPrincipal"
roleClassNames="net.sf.jkniv.jaas.tomcat.RolePrincipal">
</Realm>
</Engine>
Modify web.xml from your application configuring the new realm acme-realm:
Any user authenticated auth
FORM acme-realm /login.html /error.html Exclude from Security /api/* auth
Set up Tomcat to to find tomcat-install/conf/login.conf file specifying its location to the JVM, for instance by setting the environment variable: JAVA_OPTS=$JAVA_OPTS -Djava.security.auth.login.config==$CATALINA_BASE/conf/login.conf
start Tomcat (run, forrest, run)
Note: If Enable Single Sign On for Tomcat it’s a requirement uncomment the <Valve>element from tomcat-install/conf/server.xml file.
<Host name="localhost" ...> ... <Valve className="org.apache.catalina.authenticator.SingleSignOn"/> ... </Host>