Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałAdelajda Berg Został zmieniony 10 lat temu
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">
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.