Hello all,
In this tutorial we are going to configure JDBCRealm JAAS for tomcat 7 and mysql database server.
Let us first understand what exactly these terminologies mean.
JAAS: Java Authentication and Authorization Service is used for user authentication. This provides separation of concerns for user authentication so that they are managed independently
JDBCRealm: We can say this is used to look for users in provided relational database. All the user credentials will be retrieved by tomcat using JDBCRealm.
Form based authentication: This is a mechanism by which security is provided for web resources. If the user is authenticated, then resource will be served, otherwise it will lead to a login page where user can fill in login credentials and after successful login, the resource will be served.
We will follow these steps for configuration
1. Prepare database for user credentials and roles
2. Configure tomcat 7 server for JDBCRealm with our database
3. Create a web application in eclipse
4. Configure security for the resources which we want to protect in our web application
5. Run example
1. Prepare database:
Copy paste the following sql script and run from mysql command prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE DATABASE tutorialsdb;
DROP DATABASE IF EXISTS tutorialsdb;
CREATE DATABASE tutorialsdb;
USE tutorialsdb;
CREATE TABLE users (
username varchar(20) NOT NULL PRIMARY KEY,
password varchar(20) NOT NULL
);
CREATE TABLE roles (
rolename varchar(20) NOT NULL PRIMARY KEY
);
CREATE TABLE users_roles (
username varchar(20) NOT NULL,
rolename varchar(20) NOT NULL,
PRIMARY KEY (username, rolename),
CONSTRAINT users_roles_fk1 FOREIGN KEY (username) REFERENCES users (username),
CONSTRAINT users_roles_fk2 FOREIGN KEY (rolename) REFERENCES roles (rolename)
);
INSERT INTO `tutorialsdb`.`users` (`username`, `password`) VALUES ('prasadkharkar', 'password');
INSERT INTO `tutorialsdb`.`roles` (`rolename`) VALUES ('user');
INSERT INTO `tutorialsdb`.`users_roles` (`username`, `rolename`) VALUES ('prasadkharkar', 'user');
COMMIT;
This will create the database and add data into it.
2. Configure tomcat 7 server.xml for JDBCRealm
Add a realm tag intomcat_home/conf/server.xml file. Placemysql-connector-java.jarintomcat_home/lib
1
2
3
4
5
6
7
8
9
10
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/tutorialsdb"
connectionName="root"
connectionPassword="root"
userTable="users"
userNameCol="username"
userCredCol="password"
userRoleTable="users_roles"
roleNameCol="rolename" />
3. Create a dynamic web project in eclipse.
Click File -> New -> Dynamic Web Project. Name itTomcat7FormBasedJAAS. Also place mysql-connector-java.jarinWEB-INF/lib

Directory structure after creating project
4. Configure security for web application
Paste following content inweb.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<security-constraint>
<web-resource-collection>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
<security-role>
</security-role>
<login-config>
<form-login-config>
</form-login-config>
</login-config>
</web-app>
Create protected.jspin Webcontent/protectedfolder and paste following code in it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2730/viewspace-3128018/ ,如需转载,请注明出处,否则将追究法律责任。