Mi piacerebbe che gli utenti (che sono autorizzati ad accedere al mio sito) siano caricati da un database MySQL. Per farlo voglio configurare un JDBCRealm per il mio server applicazioni Apache Tomcat 7.Come impostare un JDBCRealm in Apache Tomcat 7?
Ho letto lo documentation e ho creato una connessione al database utilizzando una risorsa JNDI (jdbc/foo4). Questa risorsa funziona (lo uso già nella mia applicazione per recuperare i dati). Il che non sembra funzionare, è il collegamento di un reame con questa risorsa.
mio file di configurazione si presenta così:
src \ Main \ webapp \ META-INF \ context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/my-webapp">
<!-- works! -->
<Resource name="jdbc/foo4"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/foo4"
username="root"
password="root"
maxActive="8"
maxIdle="4"
maxWait="10000"
auth="Container"
/>
<!-- Does not seem to work?! -->
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/foo4"
userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles"
roleNameCol="role_name"/>
</Context>
Nel mio standard descrittore di distribuzione sono entrato il seguente:
src \ main \ webapp \ WEB-INF \ web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<security-constraint>
<display-name>General Restriction</display-name>
<web-resource-collection>
<web-resource-name>Entire Application</web-resource-name>
<description>All resources in this application are protected.</description>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Administration Area</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
<resource-ref>
<res-ref-name>jdbc/foo4</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
E ho usato questo script SQL per creare un utente di esempio:
security.sql
creare utenti della tabella (nome_utente varchar (15) NOT NULL chiave primaria , user_pass varchar (15) non nullo);
creare user_roles tavola (nome_utente varchar (15) non nulli,
role_name varchar (15) non nullo, chiave primaria (nome_utente, role_name));INSERISCI NEGLI UTENTI (user_name, user_pass) VALUES ('benny', 'test'); INSERISCI INTO user_roles (user_name, role_name) VALUES ('benny', 'admin');
Ma non riesco ad accedere con l'utente "benny" e la password "test". Posso accedere con l'utente "tomcat" e la password "tomcat" (perché è definito in% CATALINA_HOME% \ conf \ tomcat-users.xml) ma non riesco ad accedere con il mio utente dal mio database MySQL.
Ovviamente, il mio server Tomcat utilizza un driver MySQL (ho inserito "mysql-connector-java-5.1.9.jar" in% CATALINA_HOME% \ lib).
ottengo il seguente messaggio di errore quando si tenta di accedere a:
Sep 08, 2012 7:38:55 PM org.apache.catalina.realm.DataSourceRealm open
Exception performing authentication
javax.naming.NameNotFoundException: Name [jdbc/foo4] is not bound in this Context. Unable to find [jdbc].
Qualcuno vede l'errore?
Grazie mille. Questa era la soluzione! Ora funziona. :-) –
Prego. – BalusC
@BalusC Questa risposta non è rilevante per me al momento ma tu sei il re di JEE. Rispetto!! e grazie per tutto il duro lavoro. –