resource reference

0

Czy jest jakiś sposób na autoryzację dostępu do resourców, np do kolejki do bazy danych?

W web.xml mam tak wpis:

     <resource-ref>
        <description>MySQL</description>
        <res-ref-name>jdbc/TestDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

W context.xml:

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>

Niby jest pole odnośnie autoryzacji, ale nigdzie nie mogę znaleźć informacji jak przydzielać uprawnienia dla poszczególnych użytkowników aplikacji? Jest to w ogóle możliwe? Nie chciałbym, żeby admin miał takie same uprawnienia jak klient :(

0

dołóż sobie warstwę biznesową (EJB3.0), i tam już nie ma z tym najmniejszego problemu, dajesz
annotacje @PersistenceContexts() zawierającą kolekcję konkretnych @PersistenceContext przyznawanychw zależności od poziomu dostępu zalogowanego użytkownika, co oczywiścei przekłada się na poziomy dostępu w samej bazie danych. W JSF'ach oczywiście trzeba jeszcze dołożyć mapowanie ról na grupy:
w sun-web.xml

 <security-role-mapping>
    <role-name>rola1</role-name>
    <group-name>grupa1</group-name>
  </security-role-mapping>

a same prawa dostępu do poszczególnych 'kawałków' aplikacji nadaje się w web.xml. np tak:

 <security-constraint>
        <display-name>Constraint1</display-name>
        <web-resource-collection>
            <web-resource-name>pracownik</web-resource-name>
            <description/>
            <url-pattern>/faces/pracownik/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>pracownik</role-name>
            </auth-constraint>
        <user-data-constraint>
            <description/>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
        </security-constraint>

pzdr.

0
Shimmi napisał(a)

dołóż sobie warstwę biznesową (EJB3.0), i tam już nie ma z tym najmniejszego problemu, dajesz
annotacje @PersistenceContexts() zawierającą kolekcję konkretnych @PersistenceContext przyznawanychw zależności od poziomu dostępu zalogowanego użytkownika, co oczywiścei przekłada się na poziomy dostępu w samej bazie danych. W JSF'ach oczywiście trzeba jeszcze dołożyć mapowanie ról na grupy:
w sun-web.xml
pzdr.

:/ EJB3 nie znam ( jeszcze ;)), hmmm a nie zna ktoś prostszego sposoby w sam raz dla czystego jsp/servlet i tomcata?

Nie wiem, może czegoś nie rozumiem, jak coś poprawcie: mam sobie jakiś resurce np: jdbc/TestDB. Dostęp do tego mam z obojętnie jakiej klasy - też zwykłej pomocniczej klasy java (żaden tam servlet itd). Tzn że nie można/ nie da się ograniczyć do tego zasobu dostępu? Jeżeli nie, czy to może mieć wpływa na bezpieczeństwo aplkacji?

I jeszcze jedno pytanie, a czy jest możliwość zablokowania dostępu do jakiejś klasy (zwykłej) danemu servletowi/jsp?

0

Jeżeli chodzi o najprostszą metodę to podstawy:

  • w bazie utwórz tabele role, user(to pewno masz) i user_role
  • zdefiniuj uprawnienia w tablicy role tak by jedna czynnośc odpowiadała jednemu uprawnieniu
  • niech użytkownik posiada mapę ról wczytywaną w trakcie logowania z tablei user_role, a następnie trzymaną w sesji po stronie serwera. Jeżeli użytkownik chce wykonać jakąś operację wymagającą uprawnień sprawdzasz w mapie czy ma do tego prawo. Ładne proste i choć nie najlepsze (sesja) rozwiązanie to sprawdza się świetnie w wielu przypadkach...
0

Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1