ここに問題があります。
JAAS レルムがデータベースに正常に接続し、ユーザー名とパスワードが一致し、セッションが認証されます。ただし、どの役割もプリンシパルに入っていないようです。Tomcat の isInUserRole はすべてのロールに対して false を返し、Tomcat セキュリティもそれらを認識しません。
Server.xml のレルム構成は次のとおりです。
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="TomcatTimedLogin"
userClassName="com.tagish.auth.TypedPrincipal"
roleClassNames="org.ovasp.java.jaas.RolePrincipal" />
ここにlogin.configがあります
TomcatTimedLogin
{
org.owasp.java.jaas.TomcatTimedLogin required
useDS=true
dsJNDI="jdbc/resourceName"
dbDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
dbURL="jdbc:sqlserver://server\\DBSERVER;databaseName=DBName"
dbUser="username"
dbPassword="password"
debug=true
loginTable="loginTable"
clippingLevel="3"
interval="10"
loginQuery="SELECT UserID,Password FROM Users WHERE LogonUserName=? AND RetirementDate is null"
rolesQuery="SELECT Role.RoleDescription FROM User_Role,Role WHERE User_Role.UserID=? AND User_Role.RoleID=Role.RoleID";
};
そして catalina.properties で、このような構成を参照します
java.security.auth.login.config=file:///C:/config/login.config
アプリケーションを起動すると、デバッグ出力に次のメッセージが表示されます。サーバーからすべてのクラスにアクセスできる必要があるため、理由がわかりません
SEVERE: Class org.ovasp.java.jaas.RolePrincipal not found! Class not added.
どんな助けでも大歓迎です。私はすでに投稿ごとに投稿を読み、チュートリアルごとにチュートリアルを読みましたが、この問題を抱えている人は解決策を投稿していません.
ところで、私は Tomcat 5.5 を使用していますが、私の選択ではなく、レガシー コードです。OWASP ログイン モジュール (OWASPJaasLoginModule.jar) も使用します。この jar ファイルは、server/lib ディレクトリにあります。