Witam,
Eksperymentuje z zastąpieniem Spring Security w aplikacji JSF czymś innym. Ponieważ jest to standard, postanowiłem spróbować z JASS. Mam relację jeden do wielu między użytkownikiem, a rolą.

DDL tabel prezentuje się następująco:

CREATE TABLE userdata
(
  userdata_id integer NOT NULL DEFAULT nextval('userdata_id_seq'::regclass),
  username character varying(30) NOT NULL,
  email character varying(60) NOT NULL,
  password character varying(250) NOT NULL,
  name character varying(30) NOT NULL,
  enabled boolean NOT NULL DEFAULT true,
  surname character varying(30) NOT NULL,
  CONSTRAINT userdata_id PRIMARY KEY (userdata_id)
)

CREATE TABLE role
(
  role_id integer NOT NULL DEFAULT nextval('role_id_seq'::regclass),
  name character varying(30) NOT NULL,
  CONSTRAINT role_id PRIMARY KEY (role_id)
)

CREATE TABLE user_has_role
(
  user_has_role_id integer NOT NULL DEFAULT nextval('user_has_role_id_seq'::regclass),
  role_id integer NOT NULL,
  userdata_id integer NOT NULL,
  CONSTRAINT user_has_role_id PRIMARY KEY (user_has_role_id),
  CONSTRAINT role_user_has_role_fk FOREIGN KEY (role_id)
      REFERENCES role (role_id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT user_user_has_role_fk FOREIGN KEY (userdata_id)
      REFERENCES userdata (userdata_id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)

Query sprawdzające czy użytkownik należy do roli prezentuje się następująco (pobrane z działającej konfiguracji Spring Security):

            <security:jdbc-user-service data-source-ref="dataSource"
                                        users-by-username-query="SELECT userdata.username, userdata.password, userdata.enabled FROM userdata WHERE userdata.username =?"
                                        authorities-by-username-query="SELECT userdata.username, role.name FROM user_has_role INNER JOIN userdata ON userdata.userdata_id = user_has_role.userdata_id INNER JOIN role ON role.role_id = user_has_role.role_id WHERE userdata.username =?" />

Zastanawia mnie czy JASS potrafi uzywać customowych query JDBC, czy też powinienem raczej zastosować inny mechanizm do uwierzytelniania / autoryzacji?

Czytam następujący totorial, w którym jest podane jak powinna wyglądać struktura tabel dla JASSa:
http://docs.oracle.com/javaee/6/tutorial/doc/glxgo.html

Nigdzie nie widze jak używać relacji między użytkownikiem, a rolą w postaci jeden do wielu.

Pytanie:

  1. Czy w JASS JDBC Realm da się customowo definiować query mniej więcej tak jak podałem (może konieczne będzie zdefiniowanie własnego realm)?
  2. Czy jeżeli jest to trudne / skomplikowane czy powinienem pomyśleć o innym frameworku (rozważę w takiej sytuacji Apache Shiro).