Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Projektowanie warstwy serwera Acegi. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.

Podobne prezentacje


Prezentacja na temat: "Projektowanie warstwy serwera Acegi. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego."— Zapis prezentacji:

1 Projektowanie warstwy serwera Acegi

2 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 2 Acegi Acegi jest to narzędzie służące zapewnieniu bezpieczeństwa w aplikacjach korporacyjnych. Zapewnia wszechstronne mechanizmy uwierzytelniania i autoryzacji. Działanie Acegi polega na zastosowaniu szeregu filtrów. Dbają one o to aby użytkownik uzyskał dostęp do tych elementów, do których ma prawo.

3 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 3 Zalety Acegi Open Source Elastyczność Uniwersalność Przezroczystość Oferuje szeroki zakres usług związanych z bezpieczeństwem Nie wymaga ingerencji w logikę biznesowa

4 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 4 Budowa Głównym obiektem jest SecurityContextHolder przechowujący dane związane z bezpieczeństwem HttpSessionContextIntegrationFilter – dba o to, by SecurityContextHolder był przechowywany miedzy kolejnymi żądaniami HTTP AuthenticationProvider – jego zadaniem jest utworzenie właściwego obiektu Authentication, w przypadku podania przez użytkownika prawidłowych danych uwierzytelniających AccessDecisionManager – zarządza podejmowaniem decyzji, czy zalogowany użytkownik ma prawa do żądanego zasobu AccessDecisionVoter – obiekt wykorzystywany przez AccessDecisionManager do podejmowania decyzji autoryzacyjnych

5 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 5 Authentication (I) public static String getLogin() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Object obj = authentication.getPrincipal(); if (obj instanceof UserDetails) { UserDetails ud = (UserDetails) obj; return ud.getUsername(); } throw new SecurityException("unknown UserDetails"); }

6 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 6 Authentication (II) public static String[] getRoles() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) throw new ACLSecurityException("user not authenicated"); GrantedAuthority[] ga = authentication.getAuthorities(); ArrayList lista = new ArrayList ();

7 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 7 Authentication (III) for (int i = 0; i < ga.length; i++) { String s = ga[i].getAuthority(); if (s.startsWith("Role_")) lista.add(s); } return (String[]) lista.toArray(new String[0]); }

8 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 8 Pobieranie zalogowanego użytkownika public Uzytkownik getZalogowanyUzytkownik() { Uzytkownik uzytkownik = uzytkownikDAO.getByLogin( BibliotekaThreadContext.getLogin()); return uzytkownik; }

9 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 9 authz:authorize..... ifAllGranted ifAnyGranted ifNotGranted

10 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 10 Konfiguracja Acegi Security opiera swe działanie na pewnej grupie filtrów, które dostarczają odpowiednich usług związanych z bezpieczeństwem Filtry należy zdefiniować w pliku web.xml

11 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 11 Filtry - konfiguracja (I) Acegi Filter Chain Proxy org.acegisecurity.util.FilterToBeanProxy targetBean filterChainProxy

12 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 12 Filtry - konfiguracja (II) Acegi Filter Chain Proxy /* charsetFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8

13 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 13 FilterChainProxy <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> /**=httpSessionContextIntegrationFilter,securityContextHolderAwareReque stFilter,anonymousProcessingFilter,formAuthenticationProcessingFilter, authenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInt erceptor,logoutFilter /security/**= httpSessionContextIntegrationFilter,....

14 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 14 Kolejność filtrów ConcurrentSessionFilter HttpSessionContextIntegrationFilter SecurityContextHolderAwareRequestFilter AnonymousProcessingFilter filtry odpowiedzialne za proces uwierzytelniania ExceptionTranslationFilter ForceChangePassword FilterSecurityInterceptor LogoutFilter

15 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 15 Konfiguracja filtrów (I) Liczba aktywnych sesji dla jednego użytkownika

16 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 16 Konfiguracja filtrów (II)

17 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 17 Konfiguracja filtrów (III) Przechowanie zalogowanego użytkownika w sesji <bean id="httpSessionContextIntegrationFilter" class="org.springframework.security.context. HttpSessionContextIntegrationFilter"> org.springframework.security.context. SecurityContextImpl

18 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 18 Konfiguracja filtrów (IV) <bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper. SecurityContextHolderAwareRequestFilter" />

19 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 19 Konfiguracja filtrów (V) Wykrycie nieznanego użytkownika <bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous. AnonymousProcessingFilter"> <property name="userAttribute" value="anonymousUser,Role_ANONYMOUS" />

20 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 20 Konfiguracja filtrów (VI) Autentykacja użytkownika <property name="authenticationManager" ref="authenticationManager" /> <property name="authenticationEntryPoint" ref="formLoginAuthenticationEntryPoint" />

21 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 21 Konfiguracja filtrów (VII) Obsługa wyjątków

22 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 22 Konfiguracja filtrów (VII)

23 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 23 Konfiguracja filtrów (VIII) Zabezpieczenie strony...

24 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 24 Konfiguracja filtrów (IX) /ierror.html=Role_ANONYMOUS,Authenticated_User /logowanie.html=Role_ANONYMOUS,Authenticated_User /aplikacja/**=Authenticated_User /security/**=Role_Admin UWAGA: w URL wyłącznie małe litery

25 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 25 AccessDecisionManager <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">

26 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 26 AuthenticationManager <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">

27 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 27 AuthenticationProvider <bean id="XMLAuthenticationProvider class="org.acegisecurity.providers.dao. DaoAuthenticationProvider">

28 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 28 XMLDetailsProvider admin = admin,admin menu1 = menu1,menu1 menu2 = menu2,menu2 menu3 = menu3,menu3

29 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 29 AuthenticationProvider (DAO) <bean id="DAOAuthenticationProvider" class="org.springframework.security.providers.dao. DaoAuthenticationProvider">

30 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 30 DAODetailsProvider (DAO) (I) select distinct rola.nazwa from ACLRola rola inner join inner join rola.uzytkownicy us where us.login = :login

31 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 31 DAODetailsProvider (DAO) (II) from Uzytkownik u where u.login = :login

32 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 32 ExampleAuthenticationDao (I) public class MyAuthenticationDao extends HibernateDaoSupport implements UserDetailsService { private String authorities_HQL; private String login_HQL; @Override public UserDetails loadUserByUsername(String userLogin) throws UsernameNotFoundException,DataAccessException

33 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 33 ExampleAuthenticationDao (II) { List userlist = (List ) getHibernateTemplate().findByNamedParam(login_HQL, "login", userLogin); Uzytkownik user = userlist.get(0); GrantedAuthority[] arrayAuths = getAuthorities(user); UserDetails authUser = new UserDetails(user.getLogin(), user.getHaslo(), user.isCzyAktywne(), expired, true, true, arrayAuths); return authUser; }

34 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 34 EntryPoint <bean id="formLoginAuthenticationEntryPoint" class="org.acegisecurity.ui.webapp. AuthenticationProcessingFilterEntryPoint"> /logowanie.html false

35 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 35 Konfiguracja filtrów (X) Definicja panelu logowania /logowanie.html

36 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 36 Konfiguracja filtrów (XI) /logowanie.html

37 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 37 Login - jsp " method="post"> Login: Hasło: Zaloguj

38 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 38 LoginFilter public class MyAuthenticationProcessingFilter extends AuthenticationProcessingFilter { @Override protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) { Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); //zapisanie danych w bazie lub do loggera super.onSuccessfulAuthentication(request, response, authResult); }

39 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 39 Konfiguracja filtrów (XII) wylogowywania

40 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 40 LogoutFilter public class MyLogoutFilter implements LogoutHandler { @Override public void logout(HttpServletRequest arg0, HttpServletResponse arg1, Authentication arg2) { HttpSession session = arg0.getSession(false); if (session != null) session.invalidate(); }

41 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 41 Logout - jsp ">wyloguj

42 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 42 passwordEncoder protected String zaszyfrujHaslo(String plainPassword) { return passwordEncoder.encodePassword(plainPassword, null); }

43 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 43 ApplicationListener public class AutentykacjaListener implements ApplicationListener { private DziennikService dziennikService; @Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof AuthenticationSuccessEvent) { AuthenticationSuccessEvent e = (AuthenticationSuccessEvent) event; dziennikService.zarejstruj(e.getAuthentication(), e.getTimestamp()); } }}

44 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 44 ApplicationListener (konfiguracja) <bean class="commons.security.authentication.event. ApplicationListener">


Pobierz ppt "Projektowanie warstwy serwera Acegi. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego."

Podobne prezentacje


Reklamy Google