1.3. fejezet, JDBCRealm konfigurálása authentikációhoz

JDBCRealm létrehozásához szerkesszük a standalone.xml-t, és szúrjuk be az alábbi kódot:

      <subsystem xmlns="urn:jboss:domain:security:1.1">
        <security-domains>
            ...
            <security-domain name="KepeslapRealm">
                    <authentication>
                        <login-module code="Database" flag="required">
                            <module-option name="dsJndiName" value="java:jboss/jdbc/kepeslap_ds__my"/>
                            <module-option name="principalsQuery" value="select password from v_active_user where username=?"/>
                            <module-option name="rolesQuery" value="select group_name as userRoles,'Roles' from user_join_group where user_name=?"/>
                            <module-option name="hashAlgorithm" value="md5"/>
                            <module-option name="hashEncoding" value="base64"/>
                            <module-option name="unauthenticatedIdentity" value="anonymousUser"/>
                        </login-module>
                    </authentication>
                </security-domain>
                ...
                <security-domain name="archiwarRealm">
                    <authentication>
                        <login-module code="Database" flag="required">
                            <module-option name="dsJndiName" value="java:jboss/datasources/ArchiWarPostgreSQL"/>
                            <module-option name="principalsQuery" value="select password from public.v_active_user where username=?"/>
                            <module-option name="rolesQuery" value="select group_name as userRoles,'Roles' from public.user_join_group where user_name=?"/>
 
                            <module-option name="hashEncoding" value="base64"/>
                            <module-option name="unauthenticatedIdentity" value="anonymousUser"/>
                        </login-module>
                    </authentication>
                </security-domain>
                ...
            </security-domains>
        </subsystem>

Ahol nincs hashAlgorithm meghatározva, ott egyszerű szöveges formába tárolódik a jelszó. Az alkalmazásunk WebContent/WEB-INF könyvtárába helyezzük el az alábbi jboss-web.xml fált:

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

Ezzel meghatároztuk az azonosításra használt biztonsági előírást

A web.xml-be pedig beállíthatjuk, hogy hol és milyen formában alkalmazzuk a biztonsági előírást:

...
 <security-constraint>
   <web-resource-collection>
    <web-resource-name>admin</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
   </web-resource-collection>
   <auth-constraint>
    <role-name>ROLE_ADMIN</role-name>
   </auth-constraint>
 </security-constraint>
 <security-constraint>
   <web-resource-collection>
     <web-resource-name>user</web-resource-name>
     <url-pattern>/user/*</url-pattern>
     <http-method>POST</http-method>
     <http-method>GET</http-method>
   </web-resource-collection>
   <auth-constraint>
     <role-name>ROLE_ADMIN</role-name>
     <role-name>ROLE_USER</role-name>
   </auth-constraint>
 </security-constraint>
 <login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
   <form-login-page>/login.jsp</form-login-page>
   <form-error-page>/login-fault.jsp</form-error-page>
  </form-login-config>
 </login-config>
 <security-role>
  <role-name>ROLE_ADMIN</role-name>
 </security-role>
 <security-role>
  <role-name>ROLE_USER</role-name>
 </security-role>
...

Ami meghatározza az azonosítás formáját, az az auth-method-ban elhelyezett FORM érték. Ez az érték azt jelenti, hogy saját weboldalt készíthetünk a bejelentkezéshez, bizonyos szabályokat követve. Ennek az oldalnak az alábbiakat kell tartalmaznia: egységes FORM mezőket a felhasználó nevével és jelszavával, és egy j_security_check eseményt.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                       "http://www.w3.org/TR/html4/loose.dtd">
 
<html>
  <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login Page</title>
  </head>
  <body>
    <h1>Login</h1>
    <form method="post" action="j_security_check">
        username: <input type="text" name="j_username" /><br/>
        password: <input type="password" name="j_password" /><br/>
        <input type="submit" value="Login" />
    </form>
 
  </body>
</html> 

Az adatbázis szerkezet PostgreSQL-ben:

CREATE TABLE postcarduser
(
  user_name CHARACTER VARYING(60) NOT NULL,
  user_password CHARACTER VARYING(12) NOT NULL,
  enabled BOOLEAN,
  emailaddress CHARACTER VARYING(255) NOT NULL
)
 
CREATE TABLE user_join_group
(
  group_name CHARACTER VARYING(20),
  user_name CHARACTER VARYING(255)
)
 
CREATE OR REPLACE VIEW v_active_user AS 
 SELECT postcarduser.emailaddress AS username, postcarduser.user_password AS password
   FROM postcarduser
  WHERE postcarduser.enabled = TRUE;

Alapértelmezett értékek felvételével feltöltve:

INSERT INTO postcarduser (user_name,user_password,enabled,emailaddress) VALUES ('Páva Zoltán','q',TRUE,'pz@mondoka.hu');
INSERT INTO postcarduser (user_name,user_password,enabled,emailaddress) VALUES ('Páva Zoltán (ity)','q',TRUE,'pz@ity.hu');
 
INSERT INTO user_join_group (user_name,group_name) VALUES ('pz@mondoka.hu','ROLE_USER');
INSERT INTO user_join_group (user_name,group_name) VALUES ('pz@ity.hu','ROLE_ADMIN');

Teszteljük az alkalmazást: nyissuk meg a http://localhost:8080/[ProjektNév]/user/user.jsp . Mivel egy védett könyvtárba próbálunk elérni egy oldalt, először a login.jsp jelenik meg, mint bejelentkező oldal, majd helyes felhasználónév/jelszó megadása után megjelenik a user.jsp