문제

I'm developing a java web application with Netbeans and maven.

I implemented my own Realm extending class org.apache.catalina.realm.DataSourceRealm.

So, I have a parse error in context.xml caused by java.lang.ClassNotFoundException: com.company.authentication.MyRealm

I fixed this by building the JAR with my Realm and putting in tomcat lib folder.

Is there any way to do this automatically? Ie, make the Tomcat in recognizing my Realm in the deploy or make the "Tomcat Class Loader" load my Realm only with WAR file (or by maven).

My Realm

public class MyRealm extends DataSourceRealm{
    @Override
    public Principal authenticate(String username, String credentials) {

        ...

        //Applying encryption
        credentials = MyEncrypt.encrypt(credentials);

        ... 

        return authenticate(dbConnection, username, credentials);
    }
}

My context.xml file

<Resource auth="Container" driverClassName="org.postgresql.Driver" maxActive="10" maxIdle="3" name="jdbc/my_db" password="123456" type="javax.sql.DataSource" url="jdbc:postgresql://localhost:5432/app_web_login" username="postgres" />    
<Realm className="com.company.authentication.MyRealm" dataSourceName="jdbc/my_db" roleNameCol="role_name" userCredCol="user_pass" userNameCol="user_name" userRoleTable="user_roles" userTable="users" localDataSource="true"/>

Part of My pom.xml file

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>7.0.42</version>
            <scope>provided</scope>
        </dependency>
        ...
    </dependencies>
도움이 되었습니까?

해결책

Currently, there is no way to tell Tomcat to look in the web application for your Realm implementation.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top