Turned out that the database driver could not be found, which resulted
in the same error that I was being given by the Container when it
tried to connect for the JDBCRealm.
Adding the file to the WEB-INF/lib folder allows a connection to be
made from a JSP, however Tomcat still gives the same error as before -
does adding the jar to WEB-INF/lib give the container access to the
class files stored in it?!
The contents of the server.xml file (which does not work correctly) is:
<Realm className="org.apache.catalina.realm.JDBCRealm"
debug="99"
driverName="com.borland.datastore.jdbc.DataStoreDriver"
connectionURL="jdbc:borland:dslocal:C:\\Documents
and Settings\\SIS_Db.jds"
connectionName="sysdba"
connectionPassword="masterkey"
userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles"
roleNameCol="role_name" />
For anyone with a similar problem the driver (DataStoreDriver) can be
found in <JBuilder>\lib\jdsserver.jar. The code I added to the top of
the JSP to test the database connection is below:
<%
try {
Class.forName("com.borland.datastore.jdbc.DataStoreDriver");
}
catch (Exception e) {
System.out.println("Driver Error\n" + e);
}
try {
String username = "sysdba";
String password = "masterkey";
String db_url = "jdbc:borland:dslocal:";
String db_file = "C:\\Documents and Settings\\SIS_Db.jds";
java.sql.Connection
connection=java.sql.DriverManager.getConnection(db_url + db_file,
username, password);
java.sql.ResultSet
rs=connection.createStatement().executeQuery("SELECT * FROM users");
System.out.println("Column count is: " + rs.getMetaData().getColumnCount());
}
catch (Exception e) {
System.out.println("Error\n" + e);
}
%>
On Tue, 8 Feb 2005 20:17:49 -0500, David G. Friedman
<[EMAIL PROTECTED]> wrote:
Tim,
Have you tried using any command line tools to get to your datastore?
Knowing that could rule out permissions issues on the database site as well
as the connection host/port/URL.
Regards,
David
-----Original Message-----
From: Tim Christopher [mailto:[EMAIL PROTECTED]
Sent: Tuesday, February 08, 2005 5:45 PM
To: Struts Users Mailing List
Subject: Re: Application Security
I managed to solve the first error by reordering the elements within
the server.xml file, however I'm now stuck with the following error
(which occurs when the server is started):
JDBCRealm[Catalina]: Exception opening database connection
java.sql.SQLException: com.borland.datastore.jdbc.DataStoreDriver
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:589)
at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:663)
<snip/>
Does anyone know if this is a problem with the database driver, or the
location of the database? I've tried changing the URL to a path that
doesn't exist and I still get the same error, however I'm confident
that the connectionURL is correct as it connects perfectly when using
the same information within JBuilder's database pilot.
Any suggestions would be appreciated. :o)
Tim
On Tue, 8 Feb 2005 12:07:16 -0500, David G. Friedman
<[EMAIL PROTECTED]> wrote:
Tim,
Have you also updated your web.xml and Tomcat conifgurations?
-----Original Message-----
From: Tim Christopher [mailto:[EMAIL PROTECTED]
Sent: Tuesday, February 08, 2005 12:05 PM
To: Struts Users Mailing List
Subject: Re: Application Security
Cheers for all your advice.
I've just tried implementing the JDBCRealm, though unfortunaltly it
does not work. The Log4j error file contains the following:
http-80-Processor25 ERROR org.apache.catalina.realm.JAASRealm
JAASRealm.java:269 Unexpected error
java.lang.SecurityException: Unable to locate a login configuration
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:97)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
<snip/>
To be honest, I'm not really sure what that means... All I've done so
far is copy a simple example and I've got that error. Do I need to
add anything to the classpath?
I can post the code I'm using if anything thinks that will help....
On Tue, 8 Feb 2005 03:06:51 -0000, Niall Pemberton
<[EMAIL PROTECTED]> wrote:
The forms for container managed security don't have to be plain html -
you
can configure in the web.xml custom "Logon" and "Logon Error" pages
which
can be jsps, not just plain html. I have a custom tag on each of these
pages
which writes the fact that a user has arrived at that page to log4j
along
with details from the request (e.g. IP address). Log4j is pretty
powerful
in
how you can configure it to filter that info and where to send it to.
There are tags in the Jakarta Taglibs which you could use to achieve the
same thing...
http://jakarta.apache.org/taglibs/doc/log-doc/intro.html
http://jakarta.apache.org/taglibs/doc/request-doc/intro.html
For example on your "Logon Error Page", you might have something like
this...
<req:request id="req"/>
<log:error category="myapp.logon.failed">
<bean:write name="req" property="remoteAddr"/>
<bean:write name="req" property="remoteHost"/>
</log:error>
Once a user has "logged on", you can get the user name from from the
request
and then look up the user details wherever they are stored...
request.getUserPrincipal().getName()
The actual form elements required are, as you say, plain html - but is
there
any need for special tags since the action your posting to is fixed?
Niall
----- Original Message -----
From: "Tim Christopher" <[EMAIL PROTECTED]>
Sent: Tuesday, February 08, 2005 2:08 AM
I've recently discovered that it is not possible to map an action to
j_security_check. Given this situation how is it possible to populate
a form bean with user data, or create a log of any failed login
attempts (bad username / password) if the container takes control of
the entire login process?
Looking back at previous posts to the newsgroup I can see that in the
past people have just used plain html to produce the j_security_check
form. Is it possible to do this using the <sslext:form> tag, but so
that it does not require a Struts action mapping for j_security_check
to be present?
I was currently intending on using JDBCRealm and the security-filter
to control the site's security, though given the above problems I'm
starting to think there might be a better way? Or are these problems
everyone has already solved, as surely some form of login system is
present in the vast majority of Struts applications.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]