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
- A hozzászóláshoz be kell jelentkezni