1 / 44

Acegi

Acegi. Acegi. Acegi jest to narzędzie służące zapewnieniu bezpieczeństwa w aplikacjach korporacyjnych. Zapewnia wszechstronne mechanizmy uwierzytelniania i autoryzacji.

baina
Download Presentation

Acegi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Acegi

  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. 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 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 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"); } 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<String> lista = new ArrayList<String>(); 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]); } 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; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  9. authz:authorize <authz:authorize ifAnyGranted="Dyrektor,Student,Nauczyciel"> ..... </authz:authorize> ifAllGranted ifAnyGranted ifNotGranted 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  11. Filtry - konfiguracja (I) <filter> <filter-name>Acegi Filter Chain Proxy</filter-name> <filter-class> org.acegisecurity.util.FilterToBeanProxy </filter-class> <init-param> <param-name>targetBean</param-name> <param-value>filterChainProxy</param-value> </init-param> </filter> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  12. Filtry - konfiguracja (II) <filter-mapping> <filter-name>Acegi Filter Chain Proxy</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>charsetFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  13. FilterChainProxy <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> /**=httpSessionContextIntegrationFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,formAuthenticationProcessingFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor,logoutFilter /security/**= httpSessionContextIntegrationFilter, .... </value> </property> </bean> 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  15. Konfiguracja filtrów (I) • Liczba aktywnych sesji dla jednego użytkownika <bean id="concurrentSessionController" class="org.springframework.security.concurrent. ConcurrentSessionControllerImpl"> <property name="maximumSessions" value="1" /> <property name="exceptionIfMaximumExceeded" value="false"></property> <property name="sessionRegistry" ref="sessionRegistry"/> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  16. Konfiguracja filtrów (II) <bean id="concurrentSessionFilter" class="org.springframework.security.concurrent. ConcurrentSessionFilter"> <property name="expiredUrl” value="/logowanie.html?login_error=2"/> <property name="sessionRegistry" ref="sessionRegistry"/> </bean> <bean id="sessionRegistry" class="org.springframework.security.concurrent. SessionRegistryImpl" /> 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"> <property name="contextClass"> <value>org.springframework.security.context. SecurityContextImpl</value> </property> </bean> 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" /> 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="key" value="changeThis" /> <property name="userAttribute" value="anonymousUser,Role_ANONYMOUS" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  20. Konfiguracja filtrów (VI) • Autentykacja użytkownika <bean id="authenticationProcessingFilter” class="org.springframework.security.ui.basicauth. BasicProcessingFilter"> <property name="authenticationManager" ref="authenticationManager" /> <property name="authenticationEntryPoint" ref="formLoginAuthenticationEntryPoint" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  21. Konfiguracja filtrów (VII) • Obsługa wyjątków <bean id="exceptionTranslationFilter” class="org.springframework.security.ui. ExceptionTranslationFilter"> <property name="authenticationEntryPoint"> <ref bean="formLoginAuthenticationEntryPoint" /> </property> <property name="accessDeniedHandler” ref="accessDeniedHandler" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  22. Konfiguracja filtrów (VII) <bean id="accessDeniedHandler” class="org.springframework.security.ui. AccessDeniedHandlerImpl"> <property name="errorPage" value="/accessDenied.html" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  23. Konfiguracja filtrów (VIII) • Zabezpieczenie strony <bean id="filterSecurityInterceptor” class="org.acegisecurity.intercept.web. FilterSecurityInterceptor"> <property name="authenticationManager"> <ref bean="authenticationManager" /> </property> <property name="accessDecisionManager"> <ref bean="accessDecisionManager" /> </property> ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  24. Konfiguracja filtrów (IX) <property name="objectDefinitionSource"> <value> /ierror.html=Role_ANONYMOUS,Authenticated_User /logowanie.html=Role_ANONYMOUS,Authenticated_User /aplikacja/**=Authenticated_User /security/**=Role_Admin </value> </property> </bean> UWAGA: w URL wyłącznie małe litery Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  25. AccessDecisionManager <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> <property name="allowIfAllAbstainDecisions" value="false" /> <property name="decisionVoters"> <list> <bean class="org.acegisecurity.vote.RoleVoter"> <property name="rolePrefix" value="” /> </bean> </list> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  26. AuthenticationManager <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <list> <ref bean="XMLAuthenticationProvider" /> </list> </property> <property name="sessionController” ref="concurrentSessionController"/> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  27. AuthenticationProvider <bean id="XMLAuthenticationProvider” class="org.acegisecurity.providers.dao. DaoAuthenticationProvider"> <property name="userDetailsService"> <ref bean="XMLDetailsProvider" /> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  28. XMLDetailsProvider <bean id="XMLDetailsProvider” class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> <property name="userMap"> <value> admin = admin,admin menu1 = menu1,menu1 menu2 = menu2,menu2 menu3 = menu3,menu3 </value> </property> </bean> 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"> <property name="userDetailsService"> <ref bean="DAODetailsProvider" /> </property> <property name="passwordEncoder" ref="passwordEncoder" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  30. DAODetailsProvider (DAO) (I) <bean id="DAODetailsProvider” class="dao.security.authentication.MyAuthenticationDao"> <property name="sessionFactory" ref="hibernateSessionFactory" /> <property name="authorities_HQL"> <value> select distinct rola.nazwa from ACLRola rola inner join inner join rola.uzytkownicy us where us.login = :login </value> </property> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  31. DAODetailsProvider (DAO) (II) <property name="login_HQL"> <value> from Uzytkownik u where u.login = :login </value> </property> </bean> 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  33. ExampleAuthenticationDao(II) { List<Uzytkownik> userlist = (List<Uzytkownik>)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; } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

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

  35. Konfiguracja filtrów (X) • Definicja panelu logowania <bean id="formAuthenticationProcessingFilter” class="commons.servlet.filter. MyAuthenticationProcessingFilter"> <property name="filterProcessesUrl" value="/_login" /> <property name="passwordParameter" value="_password"/> <property name="usernameParameter" value="_username"/> <property name="authenticationFailureUrl"> <value>/logowanie.html</value> </property> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  36. Konfiguracja filtrów (XI) <property name="defaultTargetUrl"> <value>/logowanie.html</value> </property> <property name="authenticationManager"> <ref bean="authenticationManager" /> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  37. Login - jsp <form action="<c:url value="/_login"/>" method="post"> Login: <input name="_username"/> Hasło: <input name="_password" type="password”/> <button type="submit">Zaloguj</button> </form> 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); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  39. Konfiguracja filtrów (XII) • wylogowywania <bean id="logoutFilter” class="org.springframework.security.ui.logout.LogoutFilter"> <property name="filterProcessesUrl" value="/_logout”/> <constructor-arg> <list> <bean class="commons.security.filter.MyLogoutFilter”/> </list> </constructor-arg> </bean> 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(); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  41. Logout - jsp <div class="logon"> <a href="<c:url value="/_logout"/>">wyloguj</a> </div> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  42. passwordEncoder protected String zaszyfrujHaslo(String plainPassword) { return passwordEncoder.encodePassword(plainPassword, null); } <bean id="passwordEncoder” class="org.springframework.security.providers.encoding. ShaPasswordEncoder"> <property name="encodeHashAsBase64" value="true"> </property> <constructor-arg value="384"></constructor-arg> </bean> 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()); } }} Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  44. ApplicationListener (konfiguracja) <bean class="commons.security.authentication.event. ApplicationListener"> <property name=”dziennikService" ref=”dziennikService"> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

More Related