0

JBoss で JDBC レルムをセットアップして、Web アプリでユーザー認証/承認を処理しました。エラー メッセージは表示されませんが、両方のテスト ユーザーで認証が失敗し、その理由を理解するのに苦労しています。

このプロジェクトは、JBoss と Tomcat の両方で JDBC セキュリティ レルムに関するフォーラムの投稿をまとめた結果です。

Standalone.xml の関連セクション (JBoss 管理コンソールは DB 接続とプールが正常であることを示しているため、ドライバーが正しくインストールされていることがわかります):

<datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS">
    <connection-url>jdbc:mysql://localhost:3306/securitytest</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver>com.mysql</driver>
    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
    <pool>
        <min-pool-size>10</min-pool-size>
        <max-pool-size>100</max-pool-size>
        <prefill>true</prefill>
    </pool>
    <security>
        <user-name>jboss_as</user-name>
        <password>test</password>
    </security>
    <statement>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
        <share-prepared-statements>true</share-prepared-statements>
    </statement>
</datasource>
<drivers>
    <driver name="h2" module="com.h2database.h2">
        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
    </driver>
    <driver name="com.mysql" module="com.mysql">
        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>
</drivers>
....
<security-domain name="JDBCRealm" cache-type="default">
    <authentication>
        <login-module code="Database" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/MysqlDS"/>
            <module-option name="principalsQuery" value="select user_password from USERS where user_name=?"/>
            <module-option name="rolesQuery" value="select role_name, 'Roles' from  ROLES where user_name=?"/>
        </login-module>
    </authentication>
</security-domain>

MySQL テスト データベース (securitytest) には 2 つのテーブル (users - 3 つの列 ID、user_name、password、および roles - 3 つの列: ID、user_name、role_name、group_name) が含まれており、これらに「user」と「admin」の両方に「password」を入力しました。 」をパスワードとして。Role_name と group_name は、それぞれのユーザーの名前に設定されます。エントリはクリアテキストです (現在)

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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_2_5.xsd"
id="WebApp_ID" version="2.5">

<!-- Roles -->
<security-role>
    <description>Administrators</description>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <description>Management</description>
    <role-name>mgmt</role-name>
</security-role>

<!--  Resource/role mapping -->
<security-constraint>
    <display-name>Admin Pages</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Admin Area</web-resource-name>
        <description />
        <url-pattern>/admin/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>HEAD</http-method>
        <http-method>PUT</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <description>For administrators only</description>
        <role-name>admin</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<security-constraint>
    <display-name>All Access</display-name>
    <web-resource-collection>
        <web-resource-name>Unprotected User Area</web-resource-name>
        <description>Open access for all users</description>
        <url-pattern>/users/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>HEAD</http-method>
        <http-method>PUT</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<!-- Login prompt -->
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>JDBCRealm</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/loginerror.xhtml</form-error-page>
    </form-login-config>
</login-config>
</web-app>

jboss.xml (WEB-INF ディレクトリ内):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>java:/jaas/JDBCRealm</security-domain>
</jboss-web>

最後に、login.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Login Form</title>
</h:head>
<h:body>
<p:panel header="Login From">
<form method="post" action="j_security_check">
Username: <input type="text" name="j_username" />
Password: <input type="password" name="j_password" />
<br />
<input type="submit" value="Login" />
<input type="reset" value="Reset" />
</form> 

</p:panel>
</h:body>
</html>

誰かが何かアイデアを持っていれば、私は髪を引き裂いているので本当に感謝しています. 私は愚かなことをしたと確信しています、私はそれを見ることができません。

乾杯!

4

1 に答える 1

0

これは、正しい方法で構成するのに役立つ場合があります。

http://middlewaremagic.com/jboss/?p=2187

于 2014-02-03T07:18:38.563 に答える