¶ÁÊéÈË

Spring Security Acegi ѧϰ֮·1 (ת

·¢²¼Ê±¼ä£º 2012-10-16 09:57:37 ×÷Õߣº rapoo

Spring Security Acegi ѧϰ֮·һ (ת£©

¸ÅÊö

?

?? ? Acegi Security£¨ÒÔϼò³ÆAcegi£©ÊÇÒ»¸öÄÜΪ»ùÓÚSpringµÄÆóÒµÓ¦ÓÃÌṩǿ´ó¶øÁé»î°²È«·ÃÎÊ¿ØÖƽâ¾ö·½°¸µÄ¿ò¼Ü£¬AcegiÒѾ­³ÉΪSpring¹Ù·½µÄÒ»¸ö×ÓÏîÄ¿£¬ËùÒÔÒ²³ÆÎªSpring Security¡£Ëüͨ¹ýÔÚSpringÈÝÆ÷ÖÐÅäÖÃÒ»×éBean£¬³ä·ÖÀûÓÃSpringµÄIoCºÍAOP¹¦ÄÜ£¬ÌṩÉùÃ÷ʽ°²È«·ÃÎÊ¿ØÖƵŦÄÜ¡£ËäÈ»£¬ÏÖÔÚAcegiÒ²¿ÉÒÔÓ¦Óõ½·ÇSpringµÄÓ¦ÓóÌÐòÖУ¬µ«ÔÚSpringÖÐʹÓÃAcegiÊÇ×î×ÔÈ»µÄ·½Ê½¡£


? Acegi¿ÉÒÔʵÏÖÒµÎñ¶ÔÏó·½·¨¼¶µÄ°²È«·ÃÎÊ¿ØÖÆÁ£¶È£¬ËüÌṩÁËÒÔÏÂÈý·½ÃæµÄÓ¦ÓóÌÐòµÄ°²È«£º

  • URL×ÊÔ´µÄ·ÃÎÊ¿ØÖÆ

    ÈçËùÓÐÓû§£¨°üÀ¨ÆäÃûÓû§£©¿ÉÒÔ·ÃÎÊindex.jspµÇÂ¼Ò³Ãæ£¬¶øÖ»ÓÐÊÚȨµÄÓû§¿ÉÒÔ·ÃÎÊ/user/addUser.jspÒ³Ãæ¡£AcegiÔÊÐíͨ¹ýÕýÔò±í´ïʽ»òAnt·ç¸ñµÄ·¾¶±í´ïʽ¶¨ÒåURLģʽ£¬ÈÃÊÚȨÓû§·ÃÎÊijһURLÆ¥ÅäģʽϵĶÔÓ¦URL×ÊÔ´¡£

  • ÒµÎñÀà·½·¨µÄ·ÃÎÊ¿ØÖÆ

    SpringÈÝÆ÷ÖÐËùÓÐBeanµÄ·½·¨¶¼¿ÉÒÔ±»Acegi¹ÜÀí£¬ÈçËùÓÐÓû§¿ÉÒÔµ÷ÓÃBbtForum#getRefinedTopicCount()·½·¨£¬¶øÖ»ÓÐÊÚȨÓû§¿ÉÒÔµ÷ÓÃBbtForum#addTopic()·½·¨¡£

  • ÁìÓò¶ÔÏóµÄ·ÃÎÊ¿ØÖÆ

    ÒµÎñÀà·½·¨´ú±íÒ»¸ö¾ßÌåµÄÒµÎñ²Ù×÷£¬±ÈÈç¸ü¸Ä¡¢É¾³ý¡¢ÉóÅúµÈ£¬ÒµÎñÀà·½·¨·ÃÎÊ¿ØÖƽâ¾öÁËÓû§ÊÇ·ñÓе÷ÓÃijÖÖ²Ù×÷µÄȨÏÞ£¬µ«²¢Î´¶Ô²Ù×÷µÄ¿ÍÌ壨ÁìÓò¶ÔÏ󣩽øÐпØÖÆ¡£¶ÔÓÚÎÒÃǵÄÂÛ̳ӦÓÃÀ´Ëµ£¬Óû§¿ÉÒÔµ÷ÓÃBbtForum#updateUser(User user)·½·¨¸ü¸ÄÓû§×¢²áÐÅÏ¢£¬µ«Ó¦¸Ã½öÏÞÓÚ¸ü¸Ä×Ô¼ºµÄÓû§ÐÅÏ¢£¬Ò²¼´µ÷ÓÃBbtForum#updateUser()Ëù²Ù×÷µÄUserÕâ¸öÁìÓò¶ÔÏó±ØÐëÊÇÊÜÏ޵ġ£

    Acegiͨ¹ý¶à¸ö²»Í¬ÓÃ;µÄServlet¹ýÂËÆ÷¶ÔURL×ÊÔ´½øÐб£»¤£¬ÔÚÇëÇóÊܱ£»¤µÄURL×ÊԴǰ£¬AcegiµÄServlet¹ýÂËÆ÷ÅжÏÓû§ÊÇ·ñÓÐȨ·ÃÎÊÄ¿±ê×ÊÔ´£¬ÊÚȨÕß±»¿ª·Å·ÃÎÊ£¬¶øÎ´Î´±»ÊÚȨÕß½«±»×èµ²ÔÚ´óÃÅÖ®Íâ¡£?
    Acegiͨ¹ýSpring AOP¶ÔÈÝÆ÷ÖÐBeanµÄÊܿط½·¨½øÐÐÀ¹½Ø£¬µ±Óû§µÄÇëÇóÒý·¢µ÷ÓÃBeanµÄÊܿط½·¨Ê±£¬AcegiµÄ·½·¨À¹½ØÆ÷¿ªÊ¼¹¤×÷£¬×èֹδÊÚȨÕߵĵ÷Óá£?

    ?? ¶ÔÁìÓò¶ÔÏóµÄ·ÃÎÊ¿ØÖƽ¨Á¢ÔÚ¶ÔBean·½·¨±£»¤µÄ»ù´¡ÉÏ£¬ÔÚ×îÖÕ¿ª·ÅÄ¿±êBean·½·¨µÄÖ´ÐÐǰ£¬Acegi½«¼ì²éÓû§µÄACL£¨Aeccess Control List£º·ÃÎÊ¿ØÖÆÁÐ±í£©ÊÇ·ñ°üº¬ÕýÒª½øÐвÙ×÷µÄÁìÓò¶ÔÏó£¬Ö»ÓÐÁìÓò¶ÔÏó±»ÊÚȨʱ£¬Óû§²Å¿ÉÒÔʹÓÃBean·½·¨¶ÔÁìÓò¶ÔÏó½øÐд¦Àí¡£´ËÍ⣬Acegi»¹¿ÉÒÔ¶ÔBean·½·¨·µ»ØµÄ½á¹û½øÐйýÂË£¬½«Ò»Ð©²»ÔÚµ±Ç°Óû§·ÃÎÊȨÏÞ·¶Î§ÄÚµÄÁìÓò¶ÔÏóÌÞ³ýµô——¼´´«Í³µÄÊý¾Ý¿ÉÊÓÓò·¶Î§µÄ¿ØÖÆ¡£Ò»°ãÀ´Ëµ£¬Ê¹ÓÃAcegi¿ØÖÆÊý¾Ý¿ÉÊÓÓò²¢·ÇÀíÏëµÄÑ¡Ôñ£¬Ï෴ͨ¹ý´«Í³µÄ¶¯Ì¬SQLµÄ½â¾ö·½°¸ÍùÍù¸ü¼Ó¼òµ¥Ò×ÐС£

    ´Ó±¾ÖÊÌØÐÔÉÏÀ´Ëµ£¬Servlet¹ýÂËÆ÷¾ÍÊÇ×îԭʼµÄÔ­Éú̬AOP£¬ËùÒÔÎÒÃÇ¿ÉÒÔ˵Acegi²»µ«¶ÔÒµÎñÀà·½·¨¡¢ÁìÓò¶ÔÏó·ÃÎÊ¿ØÖƲÉÓÃÁËAOP¼¼Êõ·½°¸£¬¶ÔURL×ÊÔ´µÄ·ÃÎÊ¿ØÖÆÒ²Ê¹ÓÃÁËAOPµÄ¼¼Êõ·½°¸¡£Ê¹ÓÃAOP¼¼Êõ·½°¸µÄ¿ò¼ÜÊÇÁîÈËÕñ·ÜµÄ£¬ÕâÒâζ×Å£¬¿ª·¢Õß¿ÉÒÔÔÚÓ¦ÓóÌÐòÒµÎñ¹¦ÄÜ¿ª·¢Íê±Ïºó£¬ÇáËɵØÍ¨¹ýAcegi¸øÓ¦ÓóÌÐò´©Éϰ²È«±£»¤µÄ¡°Ìú²¼ÉÀ¡±¡£

    ?

    ?

    AcegiÌåϵ½á¹¹

    ?

    Acegiͨ¹ýÁ½¸ö×é¼þ¶ÔÏóÍê³ÉÒÔÉϰ²È«ÎÊÌâµÄ´¦Àí£ºAuthenticationManager£¨ÈÏÖ¤¹ÜÆ÷£©¡¢AccessDecisionManager£¨·ÃÎÊ¿ØÖƹÜÀíÆ÷£©£¬Èçͼ 1Ëùʾ£º

    ?

    Spring Security Acegi ѧϰ֮·1 (ת£©

    ?ͼ 1AcegiÌåϵ½á¹¹

    ?

    SecurityContextHolderÊÇ¿ò¼Ü¼¶µÄÈÝÆ÷£¬Ëü±£´æ×źÍËùÓÐÓû§¹ØÁªSecurityContextʵÀý£¬SecurityContext³ÐÔØ×ÅÓû§£¨Ò²³ÆÈÏÖ¤Ö÷Ì壩µÄÉí·ÝÐÅÏ¢µÄȨÏÞÐÅÏ¢£¬AuthenticationManager¡¢AccessDecisionManager½«¾Ý´Ë½øÐа²È«·ÃÎÊ¿ØÖÆ¡£

    SecurityContextµÄÈÏÖ¤Ö÷Ì尲ȫÐÅÏ¢ÔÚÒ»¸öHTTPÇëÇóÏ̵߳Ķà¸öµ÷ÓÃÖ®¼äÊǹ²ÏíµÄ£¨Í¨¹ýThreadLocal£©£¬µ«Ëü²»ÄÜÔÚ¶à¸öÇëÇóÖ®¼ä±£³Ö¹²Ïí¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬Acegi½«ÈÏÖ¤Ö÷Ì尲ȫÐÅÏ¢»º´æÓÚHttpSessionÖУ¬µ±Óû§ÇëÇóÒ»¸öÊÜÏÞµÄ×ÊԴʱ£¬Acegiͨ¹ýHttpSessionContextIntegrationFilter½«ÈÏÖ¤Ö÷ÌåÐÅÏ¢´ÓHttpSessionÖмÓÔØµ½SecurityContextʵÀýÖУ¬ÈÏÖ¤Ö÷Ì幨ÁªµÄSecurityContextʵÀý±£´æÔÚAcegiÈÝÆ÷¼¶µÄSecurityContextHolderÀï¡£µ±ÇëÇó½áÊøÖ®ºó£¬HttpSessionContextIntegrationFilterÖ´ÐÐÏà·´µÄ²Ù×÷£¬½«SecurityContextÖеÄÈÏÖ¤Ö÷Ì尲ȫÐÅÏ¢ÖØÐÂת´æµ½HttpSessionÖУ¬È»ºó´ÓSecurityContextHolderÖÐÇå³ý¶ÔÓ¦µÄSecurityContextʵÀý¡£Í¨¹ýHttpSessionת´æ»úÖÆ£¬Óû§µÄ°²È«ÐÅÏ¢¾Í¿ÉÒÔÔÚ¶à¸öHTTPÇëÇó¼ä¹²Ïí£¬Í¬Ê±±£Ö¤SecurityContextHolderÖнö±£´æµ±Ç°ÓÐÓõÄÓû§°²È«ÐÅÏ¢£¬ÆäÕûÌå¹ý³ÌÈçͼ2Ëùʾ£º

    Spring Security Acegi ѧϰ֮·1 (ת£©

    ?ͼ 2SecurityContextÔÚHttpSessionºÍÇëÇóÏ̼߳äµÄת½»¹ý³Ì

    ?

    µ±Óû§ÇëÇóÒ»¸öÊÜÏÞµÄ×ÊԴʱ£¬AuthenticationManagerÊ×ÏÈ¿ªÊ¼¹¤×÷£¬ËüÏñÒ»¸ö°²¼ìÈë¿Ú£¬¶ÔÓû§Éí·Ý½øÐк˲飬Óû§±ØÐëÌṩÉí·ÝÈÏÖ¤µÄƾ֤£¨Ò»°ãÊÇÓû§Ãû/ÃÜÂ룩¡£ÔÚ½øÐÐÉí·ÝÈÏ֤ʱ£¬AuthenticationManager½«Éí·ÝÈÏÖ¤µÄ¹¤×÷ίÍиø¶à¸öAuthenticationProvider¡£ÒòΪÔÚ¾ßÌåµÄϵͳÖУ¬Óû§Éí·Ý¿ÉÄÜ´æ´¢ÔÚ²»Í¬µÄÓû§ÐÅÏ¢°²È«ÏµÍ³ÖУ¨ÈçÊý¾Ý¿â¡¢CAÖÐÐÄ¡¢LDAP·þÎñÆ÷£©£¬²»Í¬Óû§ÐÅÏ¢°²È«ÏµÍ³ÐèÒª²»Í¬µÄAuthenticationProviderÖ´ÐÐÖîÈçÓû§ÐÅÏ¢²éѯ¡¢Óû§Éí·ÝÅжϡ¢Óû§ÊÚȨÐÅÏ¢»ñÈ¡µÈ¹¤×÷¡£Ö»ÒªÓÐÒ»¸öAuthenticationProvider¿ÉÒÔʶ±ðÓû§µÄÉí·Ý£¬AuthenticationManager¾Íͨ¹ýÓû§Éí·ÝÈÏÖ¤£¬²¢½«Óû§µÄÊÚȨÐÅÏ¢·ÅÈëµ½SecurityContextÖС£

    µ±Óû§Í¨¹ýÉí·ÝÈÏÖ¤ºó£¬ÊÔͼ·ÃÎÊij¸öÊÜÏ޵ijÌÐò×ÊԴʱ£¬AccessDecisionManager¿ªÊ¼¹¤×÷¡£AccessDecisionManager²ÉÓÃÃñÖ÷¾ö²ß»úÖÆÅжÏÓû§ÊÇ·ñÓÐȨ·ÃÎÊÄ¿±ê³ÌÐò×ÊÔ´£¬Ëü°üº¬Á˶à¸öAccessDecisionVoter¡£ÔÚ·ÃÎʾö²ßʱÿ¸öAccessDecisionVoter¶¼ÓµÓÐͶƱȨ£¬AccessDecisionManagerͳ¼ÆÍ¶Æ±½á¹û£¬²¢°´ÕÕijÖÖ¾ö²ß·½Ê½¸ù¾ÝÕâЩͶƱ½á¹û¾ö¶¨×îÖÕÊÇ·ñÏòÓû§¿ª·ÅÊÜÏÞ×ÊÔ´µÄ·ÃÎÊ¡£

    ?

    ÖØÒª×é¼þÀà½éÉÜ

    ?

    ÿ¸ö¿ò¼Ü¶¼ÓÐһЩºËÐĵĸÅÄÕâЩ¸ÅÄî±»¹Ì»¯ÎªÀàºÍ½Ó¿Ú£¬³ÉΪ¿ò¼ÜµÄÖØÒª×é¼þÀà¡£¿ò¼ÜµÄ¹ÜÀíÀà¡¢²Ù×÷Àà¶¼ÔÚÕâЩ×é¼þÀàµÄ»ù´¡ÉϽøÐвÙ×÷¡£ÔÚ½øÈëAcegi¿ò¼ÜµÄ¾ßÌåѧϰǰ£¬ÓбØÒªÊÂÏÈÁ˽âÒ»ÏÂÕâЩ³ÐÔØAcegi¿ò¼ÜÖØÒª¸ÅÄîµÄ×é¼þÀà¡£?
    Ê×ÏÈ£¬ÎÒÃÇÒª½Ó´¥ÊÇUserDetails½Ó¿Ú£¬Ëü´ú±íÒ»¸öÓ¦ÓÃϵͳµÄÓû§£¬¸Ã½Ó¿Ú¶¨ÒåÁËÓû§°²È«Ïà¹ØµÄÐÅÏ¢£¬ÈçÓû§Ãû/ÃÜÂ룬Óû§ÊÇ·ñÓÐЧµÈÐÅÏ¢£¬Äã¿ÉÒÔ¸ù¾ÝÒÔϽӿڷ½·¨½øÐÐÏà¹ØÐÅÏ¢µÄ»ñÈ¡£º

    StringgetUsername()£º»ñÈ¡Óû§Ãû£»?
    String getPassword()£º»ñÈ¡ÃÜÂ룻?
    boolean isAccountNonExpired()£ºÓû§Õ˺ÅÊÇ·ñ¹ýÆÚ£»?
    boolean isAccountNonLocked()£ºÓû§Õ˺ÅÊÇ·ñËø¶¨£»?
    boolean isCredentialsNonExpired()£ºÓû§µÄƾ֤ÊÇ·ñ¹ýÆÚ£»?
    boolean isEnabled()£ºÓû§ÊÇ·ñ´¦ÓÚ¼¤»î״̬¡£

    µ±ÒÔÉÏÈκÎÒ»¸öÅжÏÓû§×´Ì¬µÄ·½·¨¶¼·µ»Øfalseʱ£¬Óû§Æ¾Ö¤¾Í±»ÊÓΪÎÞЧ¡£

    UserDetails»¹¶¨ÒåÁË»ñÈ¡Óû§È¨ÏÞÐÅÏ¢µÄ·½·¨£ºGrantedAuthority[] getAuthorities()£¬GrantedAuthority´ú±íÓû§È¨ÏÞÐÅÏ¢£¬Ëü¶¨ÒåÁËÒ»¸ö»ñȡȨÏÞÃèÊöÐÅÏ¢£¨ÒÔ×Ö·û´®±íʾ£¬ÈçPRIV_COMMON£©µÄ·½·¨£ºString getAuthority()¡£

    Spring Security Acegi ѧϰ֮·1 (ת£©

    ͼ 3 Óû§ºÍȨÏÞ

    ?

    ÔÚδʹÓÃAcegi֮ǰ£¬ÎÒÃÇ¿ÉÄÜͨ¹ýÀàËÆUser¡¢CustomerµÈÁìÓò¶ÔÏó±íʾÓû§µÄ¸ÅÄ²¢ÔÚ³ÌÐòÖбàдÏàÓ¦µÄÓû§ÈÏÖ¤µÄÂß¼­¡£ÏÖÔÚ£¬ÄãÒª×öµÄÒ»¸öµ÷ÕûÊÇÈÃÔ­ÏÈÕâЩ´ú±íÓû§¸ÅÄîµÄÁìÓòÀàʵÏÖUserDetails½Ó¿Ú£¬ÕâÑù£¬Acegi¾Í¿ÉÒÔͨ¹ýUserDetails½Ó¿Ú·ÃÎʵ½Óû§µÄÐÅÏ¢ÁË¡£

    UserDetails¿ÉÄÜ´ÓÊý¾Ý¿â¡¢LDAPµÈÓû§ÐÅÏ¢×ÊÔ´Öзµ»Ø£¬ÕâÒªÇóÓÐÒ»ÖÖ»úÖÆÀ´Íê³ÉÕâÏ×÷£¬UserDetailsServiceÕýÊdz䵱ÕâÒ»½ÇÉ«µÄ½Ó¿Ú¡£UserDetailsService½Ó¿ÚºÜ¼òµ¥£¬½öÓÐÒ»¸ö·½·¨£ºUserDetailsloadUserByUsername(String username) £¬Õâ¸ö·½·¨Í¨¹ýÓû§Ãû»ñÈ¡Õû¸öUserDetails¶ÔÏó¡£?
    Authentication´ú±íÒ»¸öºÍÓ¦ÓóÌÐò½»»¥µÄ´ýÈÏÖ¤Óû§£¬Acegi´ÓÀàËÆÓÚµÇÂ¼Ò³Ãæ¡¢CookieµÈ´¦»ñÈ¡´ýÈÏÖ¤µÄÓû§ÐÅÏ¢£¨Ò»°ãÊÇÓû§ÃûÃÜÂ룩×Ô¶¯¹¹ÔìAuthenticationʵÀý¡£

    ?

    Spring Security Acegi ѧϰ֮·1 (ת£©

    ͼ 4 AcegiµÄÈÏÖ¤Óû§

    ?

    Authentication¿ÉÒÔͨ¹ýObject getPrincipal()»ñȡһ¸ö´ú±íÓû§µÄ¶ÔÏó£¬Õâ¸ö¶ÔÏóÒ»°ã¿ÉÒÔת»»ÎªUserDetails£¬´ÓÖпÉÒÔÈ¡µÃÓû§Ãû/ÃÜÂëµÈÐÅÏ¢¡£ÔÚAuthentication±»AuthenticationManagerÈÏ֤֮ǰ£¬Ã»ÓÐÈκÎȨÏÞµÄÐÅÏ¢¡£ÔÚͨ¹ýÈÏÖ¤Ö®ºó£¬Acegiͨ¹ýUserDetails½«Óû§¶ÔÓ¦µÄȨÏÞÐÅÏ¢¼ÓÔØµ½AuthenticationÖС£AuthenticationÓµÓÐÒ»¸öGrantedAuthority[]getAuthorities()·½·¨£¬Í¨¹ý¸Ã·½·¨¿ÉÒԵõ½Óû§¶ÔÓ¦µÄȨÏÞÐÅÏ¢¡£

    AuthenticationºÍUserDetailsºÜÈÝÒ×±»»ìÏý£¬ÒòΪÁ½Õß¶¼ÓÐÓû§Ãû/ÃÜÂ뼰ȨÏÞµÄÐÅÏ¢£¬½Ó¿Ú·½·¨Ò²ºÜÀàËÆ¡£ÆäʵAuthenticationÊÇAcegi½øÐа²È«·ÃÎÊ¿ØÖÆÕæÕýʹÓõÄÓû§°²È«ÐÅÏ¢µÄ¶ÔÏó£¬ËüÓµÓÐÁ½¸ö״̬£ºÎ´ÈÏÖ¤ºÍÒÑÈÏÖ¤¡£UserDetailsÊÇ´ú±íÒ»¸ö´ÓÓû§°²È«ÐÅÏ¢Ô´£¨Êý¾Ý¿â¡¢LDAP·þÎñÆ÷¡¢CAÖÐÐÄ£©·µ»ØµÄÕæÕýÓû§£¬AcegiÐèÒª½«Î´ÈÏÖ¤µÄAuthenticationºÍ´ú±íÕæÊµÓû§µÄUserDetails½øÐÐÆ¥Åä±È½Ï£¬Í¨¹ýÆ¥Åä±È½Ï£¨¼òµ¥µÄÇé¿öÏÂÊÇÓû§Ãû/ÃÜÂëÊÇ·ñÒ»Ö£©ºó£¬ Acegi½«UserDetailsÖÐµÄÆäËü°²È«ÐÅÏ¢£¨ÈçȨÏÞ¡¢ACLµÈ£©¿½±´µ½AuthenticationÖС£ÕâÑù£¬ Acegi°²È«¿ØÖÆ×é¼þÔÚºóÐøµÄ°²È«·ÃÎÊ¿ØÖÆÖÐÖ»ºÍAuthentication½øÐн»»¥¡£

    ÓÉÓÚAcegi¶Ô³ÌÐò×ÊÔ´½øÐзÃÎʰ²È«¿ØÖÆÊ±£¬Ò»¶¨ÒªÊÂÏÈ»ñÈ¡ºÍÇëÇóÓû§¶ÔÓ¦µÄAuthentication£¬Acegi¿ò¼Ü±ØÐëΪAuthenticationÌṩһ¸ö¡°Ô¢Ëù¡±£¬ÒÔ±ãÔÚÐèҪʱֱ½Ó´Ó¡°Ô¢Ëù¡±°ÑËüÇë³öÀ´£¬×÷Ϊ¸÷ÖÖ°²È«¹ÜÀíÆ÷¾ö²ßµÄÒÀ¾Ý¡£

    SecurityContextHolder¾ÍÊÇAuthenticationÈÝÉíµÄ¡°Ô¢Ëù¡±£¬Äã¿ÉÒÔͨ¹ýSecurityContextHolder.getContext().getAuthenication()´úÂë»ñÈ¡Authentication¡£Ï¸ÐĹ۲ìÒ»ÏÂÕâ¾ä´úÂ룬Äã»á·¢ÏÖÔÚSecurityContextHolderºÍAuthenticationÖ®¼ä´æÔÚÒ»¸ögetContext()Öн飬Õâ¸ö·½·¨·µ»ØSecurityContext¶ÔÏó¡£ÎÒÃÇÖªµÀAuthenticationÊÇÓû§°²È«Ïà¹ØµÄÐÅÏ¢£¬ÇëÇóÏß³ÌÆäËüÐÅÏ¢£¨ÈçµÇ¼ÑéÖ¤ÂëµÈ£©Ôò·ÅÖÃÔÚSecurityContextÖУ¬¹¹³ÉÁËÒ»¸öÍêÕûµÄ°²È«ÐÅÏ¢ÉÏÏÂÎÄ¡£SecurityContext½Ó¿ÚÌṩÁË»ñÈ¡ºÍÉèÖÃAuthenticationµÄ·½·¨£º

  • Authentication getAuthentication()
  • void setAuthentication(Authentication authentication)?

    Spring Security Acegi ѧϰ֮·1 (ת£©

    ͼ?5?ÈÏÖ¤Óû§ÐÅÏ¢´æ´¢Æ÷


    SecurityContextHolderÊÇAcegi¿ò¼Ü¼¶µÄ¶ÔÏó£¬ËüÔÚÄÚ²¿Í¨¹ýThreadLocalΪÇëÇóÏß³ÌÌṩḬ̈߳󶨵ÄSecurityContext¶ÔÏó¡£ÕâÑù£¬ÈκβÎÓ뵱ǰÇëÇóÏ̵߳ÄAcegi°²È«¹ÜÀí×é¼þ¡¢ÒµÎñ·þÎñ¶ÔÏóµÈ¶¼¿ÉÒÔÖ±½Óͨ¹ýSecurityContextHolder.getContext()»ñÈ¡Ḭ̈߳󶨵ÄSecurityContext£¬±ÜÃâͨ¹ý·½·¨Èë²ÎµÄ·½Ê½»ñÈ¡Óû§Ïà¹ØµÄSecurityContext¡£

    Ḭ̈߳ó¶¨Ä£Ê½¶ÔÓÚ´ó¶àÊýÓ¦ÓÃÀ´ËµÊÇÊʺϵ쬵«ÊÇÓ¦Óñ¾Éí»á´´½¨ÆäËüµÄỊ̈߳¬ÄÇôֻÓÐÖ÷Ï߳̿ÉÒÔ»ñµÃḬ̈߳ó¶¨SecurityContext£¬¶øÖ÷Ïß³ÌÑÜÉú³öµÄÐÂÏß³ÌÔòÎÞ·¨µÃµ½Ḭ̈߳󶨵ÄSecurityContext¡£Acegi¿¼Âǵ½ÁËÕâЩ²»Í¬Ó¦ÓÃÇé¿ö£¬ÌṩÁËÈýÖÖ°ó¶¨SecurityContextµÄģʽ£º

  • SecurityContextHolder.MODE_THREADLOCAL£ºSecurityContext°ó¶¨µ½Ö÷Ị̈߳¬ÕâÊÇĬÈϵÄģʽ£»
  • SecurityContextHolder.MODE_GLOBAL£ºSecurityContext°ó¶¨µ½JVMÖУ¬ËùÓÐÏ̶߳¼Ê¹ÓÃͬһ¸öSecurityContext£»
  • SecurityContextHolder.MODE_INHERITABLETHREADLOCAL£º£ºSecurityContext°ó¶¨µ½Ö÷Ï̼߳°ÓÉÖ÷Ïß³ÌÑÜÉúµÄÏß³ÌÖС£

    Äã¿ÉÒÔͨ¹ýSecurityContextHolder.setStrategyName(StringstrategyName)·½·¨Ö¸¶¨SecurityContextµÄ°ó¶¨Ä£Ê½¡£

    ?

    Óû§ÈÏÖ¤¹ý³Ì

    ?

    AcegiÖ§³Ö¶àÖÖ·½Ê½µÄÓû§ÈÏÖ¤£ºÈçµäÐ͵ĻùÓÚÊý¾Ý¿âµÄÈÏÖ¤¡¢»ùÓÚLDAPµÄÈÏÖ¤¡¢»ùÓÚYaleÖÐÐÄÈÏÖ¤µÈ·½Ê½¡£²»Í¬µÄÈÏÖ¤»·¾³ÓµÓв»Í¬µÄÓû§ÈÏÖ¤·½Ê½£¬ÏÖÔÚÎÒÃÇÏÈÅ׿ªÕâЩ¾ßÌåµÄϸ½Ú£¬¿¼²ìÒ»ÏÂAcegi¶ÔÊÜÏÞ×ÊÔ´½øÐзÃÎÊ¿ØÖƵĵäÐ͹ý³Ì£º

    1£®Äãµã»÷Ò»¸öÁ´½Ó·ÃÎÊÒ»¸öÍøÒ³£»

    2£®ä¯ÀÀÆ÷·¢ËÍÒ»¸öÇëÇóµ½·þÎñÆ÷£¬·þÎñÆ÷ÅжϳöÄãÕýÔÚ·ÃÎÊÒ»¸öÊܱ£»¤µÄ×ÊÔ´£»

    3£®Èç¹û´ËʱÄ㲢δͨ¹ýÉí·ÝÈÏÖ¤£¬·þÎñÆ÷·¢»ØÒ»¸öÏìÓ¦ÌáʾÄã½øÐÐÈÏÖ¤——Õâ¸öÏìÓ¦¿ÉÄÜÊÇÒ»¸öHTTPÏìÓ¦´úÂ룬ÒÖ»òÖØ¶¨Ïòµ½Ò»¸öÖ¸¶¨Ò³Ã棻

    4£®¸ù¾ÝϵͳʹÓÃÈÏÖ¤»úÖÆµÄ²»Í¬£¬ä¯ÀÀÆ÷»òÕßÖØ¶¨Ïòµ½Ò»¸öµÇÂ¼Ò³ÃæÖУ¬»òÕßÓÉä¯ÀÀÆ÷ͨ¹ýһЩÆäËüµÄ·½Ê½»ñÈ¡ÄãµÄÉí·ÝÐÅÏ¢£¨Èçͨ¹ýBASICÈÏÖ¤¶Ô»°¿ò¡¢Ò»¸öCookie»òÒ»¸öX509Ö¤Ê飩£»

    5£®ä¯ÀÀÆ÷Ôٴν«Óû§Éí·ÝÐÅÏ¢·¢Ë͵½·þÎñÆ÷ÉÏ£¨¿ÉÄÜÊÇÒ»¸öÓû§µÇ¼±íµ¥µÄHTTP POSTÐÅÏ¢¡¢Ò²¿ÉÄÜÊǰüº¬ÈÏÖ¤ÐÅÏ¢µÄHTTP±¨ÎÄÍ·£©£»

    6£®·þÎñÆ÷ÅжÏÓû§ÈÏÖ¤ÐÅÏ¢ÊÇ·ñÓÐЧ£¬Èç¹ûÎÞЧ£¬Ò»°ãÇé¿öÏ£¬ä¯ÀÀÆ÷»áÒªÇóÄã¼ÌÐø³¢ÊÔ£¬ÕâÒâζ×Å·µ»ØµÚ3²½¡£Èç¹ûÓÐЧ£¬Ôòµ½´ïÏÂÒ»²½£»

    7£®·þÎñÆ÷ÖØÐÂÏìÓ¦µÚ2²½ËùÌá½»µÄԭʼÇëÇ󣬲¢ÅжϸÃÇëÇóËù·ÃÎʵijÌÐò×ÊÔ´ÊÇ·ñÔÚÄãµÄȨÏÞ·¶Î§ÄÚ£¬Èç¹ûÄãÓÐȨ·ÃÎÊ£¬ÇëÇ󽫵õ½ÕýÈ·µÄÖ´Ðв¢·µ»Ø½á¹û¡£·ñÔò£¬Ä㽫ÊÕµ½Ò»¸öHTTP 403´íÎó£¬ÕâÒâζ×ÅÄã±»½ûÖ¹·ÃÎÊ¡£

    ÔÚAcegi¿ò¼ÜÀÄã¿ÉÒÔÕÒµ½¶ÔÓ¦ÒÔÉÏ´ó¶àÊý²½ÖèµÄÀ࣬ÆäÖÐExceptionTranslationFilter¡¢AuthenticationEntryPoint¡¢AuthenticationProviderÒÔ¼°AcegiµÄÈÏÖ¤»úÖÆÊÇÆäÖеĴú±íÕß¡£

    ExceptionTranslationFilterÊÇÒ»¸öAcegiµÄServlet¹ýÂËÆ÷£¬Ëü¸ºÔð̽²âÅ׳öµÄ°²È«Òì³£¡£µ±Ò»¸öδÈÏÖ¤Óû§·ÃÎÊ·þÎñÆ÷ʱ£¬Acegi½«Òý·¢Ò»¸öJavaÒì³£¡£JavaÒì³£±¾Éí¶ÔHTTPÇëÇóÒÔ¼°ÈçºÎÈÏÖ¤Óû§ÊÇÒ»ÎÞËùÖªµÄ£¬ExceptionTranslationFilterÊÊʱµÇ³¡£¬¶ÔÕâ¸öÒì³£½øÐд¦Àí£¬Æô¶¯Óû§ÈÏÖ¤µÄ²½Ö裨µÚ3²½£©¡£Èç¹ûÒÑÈÏÖ¤Óû§Ô½È¨·ÃÎÊÒ»¸ö×ÊÔ´£¬AcegiÒ²½«Òý·¢Ò»¸öJavaÒì³££¬ExceptionTranslationFilterÔò½«Õâ¸öÒ쳣ת»»ÎªHTTP 403ÏìÓ¦Â루µÚ7²½£©¡£¿É¼û£¬Acegiͨ¹ýÒì³£½øÐÐͨѶ£¬
    ExceptionTranslationFilter½ÓÊÕÕâЩÒì³£²¢×ö³öÏàÓ¦µÄ¶¯×÷¡£

    µ±ExceptionTranslationFilterͨ¹ýJavaÒì³£·¢ÏÖÓû§»¹Î´ÈÏ֤ʱ£¬Ëüµ½µ×»á½«ÇëÇóÖØ¶¨ÏòÄĸöÒ³ÃæÒÔÒªÇóÓû§ÌṩÈÏÖ¤ÐÅÏ¢ÄØ£¿Õâͨ¹ý×ÉѯAuthenticationEntryPointÀ´´ïµ½Ä¿µÄ——Acegiͨ¹ýAuthenticationEntryPointÃèÊöµÇÂ¼Ò³Ãæ¡£

    µ±ÄãµÄä¯ÀÀÆ÷ͨ¹ýHTTP±íµ¥»òHTTP±¨ÎÄÍ·Ïò·þÎñÆ÷ÌṩÓû§ÈÏÖ¤ÐÅϢʱ£¬AcegiÐèÒª½«ÕâЩÐÅÏ¢ÊÕ¼¯µ½AuthenticationÖУ¬AcegiÓá°ÈÏÖ¤»úÖÆ¡±ÃèÊöÕâÒ»¹ý³Ì¡£´Ëʱ£¬Õâ¸öÐÂÉú³ÉAuthenticationÖ»°üº¬Óû§ÌṩµÄÈÏÖ¤ÐÅÏ¢£¬µ«²¢Î´Í¨¹ýÈÏÖ¤¡£
    AuthenticationProvider¸ºÔð¶ÔAuthentication½øÐÐÈÏÖ¤¡£AuthenticationProvider¾¿¾¹ÈçºÎÍê³ÉÕâÒ»¹ý³ÌÄØ£¿´ó¶àÊýAuthenticationProviderͨ¹ýUserDetailsService»ñÈ¡ºÍδÈÏÖ¤µÄAuthentication¶ÔÓ¦µÄUserDetails²¢½øÐÐÆ¥Åä±È½ÏÀ´Íê³ÉÕâÒ»ÈÎÎñ¡£µ±Óû§ÈÏÖ¤ÐÅϢƥÅäʱ£¬Authentication±»ÈÏΪÊÇÓÐЧµÄ£¬AuthenticationProvider½øÒ»²½½«UserDetailsÖÐȨÏÞ¡¢ACLµÈÐÅÏ¢¿½±´µ½Authentication¡£

    µ±Acegiͨ¹ýÈÏÖ¤»úÖÆÊÕ¼¯µ½Óû§ÈÏÖ¤ÐÅÏ¢²¢Ìî³äºÃAuthenticationºó£¬Authentication½«±»±£´æµ½SecurityContextHolderÖв¢´¦ÀíÓû§µÄԭʼÇëÇ󣨵Ú7²½£©¡£

    ÄãÍêÈ«¿ÉÒÔÅ׿ªAcegiµÄ°²È«»úÖÆ£¬±àд×Ô¼ºµÄServlet¹ýÂËÆ÷£¬Ê¹ÓÃ×Ô¼ºµÄ·½°¸¹¹½¨Authentication¶ÔÏó²¢½«Æä·ÅÖõ½SecurityContextHolderÖС£Ò²ÐíÄãʹÓÃÁËCMA£¨Container Managed Authentication£ºÈÝÆ÷¹ÜÀíÈÏÖ¤£©£¬CMAÔÊÐíÄã´ÓThreadLocal»òJNDIÖлñÈ¡Óû§ÈÏÖ¤ÐÅÏ¢£¬ÕâʱÄãÖ»Òª»ñÈ¡ÕâЩÐÅÏ¢²¢½«Æäת»»ÎªAuthentication¾Í¿ÉÒÔÁË¡£

    ?

    °²È«¶ÔÏó·ÃÎÊ¿ØÖÆ

    ?

    Acegi³ÆÊܱ£»¤µÄÓ¦ÓÃ×ÊԴΪ¡°°²È«¶ÔÏó¡±£¬Õâ°üÀ¨URL×ÊÔ´ºÍÒµÎñÀà·½·¨¡£ÎÒÃÇÖªµÀÔÚSpring AOPÖÐÓÐǰÖÃÔöÇ¿¡¢ºóÖÃÔöÇ¿¡¢Òì³£ÔöÇ¿ºÍ»·ÈÆÔöÇ¿£¬ÆäÖл·ÈÆÔöÇ¿µÄ¹¦ÄÜ×îΪǿ´ó——Ëü²»µ«¿ÉÒÔÔÚÄ¿±ê·½·¨±»·ÃÎÊǰÀ¹½Øµ÷Ó㬻¹¿ÉÒÔÔÚµ÷Ó÷µ»ØÇ°¸Ä±ä·µ»ØµÄ½á¹û£¬ÉõÖÁÅ׳öÒì³£¡£AcegiʹÓû·ÈÆÔöÇ¿¶Ô°²È«¶ÔÏó½øÐб£»¤¡£

    Acegiͨ¹ýAbstractSecurityInterceptorΪ°²È«¶ÔÏó·ÃÎÊÌṩһֵŤ×÷Ä£ÐÍ£¬Ëü°´ÕÕÒÔÏÂÁ÷³Ì½øÐй¤×÷£º

    1£® ´ÓSecurityContextÖÐÈ¡³öÒѾ­ÈÏÖ¤¹ýµÄAuthentication£¨°üÀ¨È¨ÏÞÐÅÏ¢£©£»

    2£® ͨ¹ý·´Éä»úÖÆ£¬¸ù¾ÝÄ¿±ê°²È«¶ÔÏóºÍ¡°ÅäÖÃÊôÐÔ¡±µÃµ½·ÃÎÊÄ¿±ê°²È«¶ÔÏóËùÐèµÄȨÏÞ£»

    3£® AccessDecisionManager¸ù¾ÝAuthenticationµÄÊÚȨÐÅÏ¢ºÍÄ¿±ê°²È«¶ÔÏóËùÐèȨÏÞ×ö³öÊÇ·ñÓÐȨ·ÃÎʵÄÅжϡ£Èç¹ûÎÞȨ·ÃÎÊ£¬Acegi½«Å׳öAccessDeniedExceptionÒì³££¬·ñÔòµ½ÏÂÒ»²½£»

    4£® ·ÃÎʰ²È«¶ÔÏó²¢»ñÈ¡½á¹û£¨·µ»ØÖµ»òHTTPÏìÓ¦£©£»

    5£® AbstractSecurityInterceptor¿ÉÒÔÔÚ½á¹û·µ»ØÇ°½øÐд¦Àí£º¸ü¸Ä½á¹û»òÅ׳öÒì³£¡£

    ?

    Spring Security Acegi ѧϰ֮·1 (ת£©

    ͼ 6AbstractSecurityInterceptor¹¤×÷Á÷³Ì

    °²È«¶ÔÏóºÍÒ»°ã¶ÔÏóµÄÇø±ðÔÚÓÚǰÕßͨ¹ýAcegiµÄ¡°ÅäÖÃÊôÐÔ¡±½øÐÐÁËÃèÊö£¬Èç¡°/view.jsp=PRIV_COMMON¡±ÅäÖÃÊôÐԾͽ«¡°/view.jsp¡±Õâ¸öURL×ÊÔ´±êʶΪ°²È«¶ÔÏó£¬Ëü±íʾÓû§ÔÚ·ÃÎÊ/view.jspʱ£¬±ØÐëÓµÓÐPRIV_COMMONÕâ¸öȨÏÞ¡£ÅäÖÃÊôÐÔͨ¹ýXMLÅäÖÃÎļþ£¬×¢½â¡¢Êý¾Ý¿âµÈ·½Ê½Ìṩ¡£°²È«¶ÔÏóͨ¹ýÅäÖÃÊôÐÔ±íʾΪһ¸öȨÏÞ£¬ÕâÑù£¬Acegi¾Í¿ÉÒÔ¸ù¾ÝAuthenticationµÄȨÏÞÐÅÏ¢»ñÖªÓû§¿ÉÒÔ·ÃÎʵÄÄÄЩ°²È«¶ÔÏó¡£

    ¸ù¾Ý°²È«¶ÔÏóµÄÐÔÖÊÒÔ¼°¾ßÌåʵÏÖ¼¼Êõ£¬AbstractSecurityInterceptorÓµÓÐÒÔÏÂÈý¸öʵÏÖÀࣺ

  • FilterSecurityInterceptor£º¶ÔURL×ÊÔ´µÄ°²È«¶ÔÏó½øÐе÷ÓÃʱ£¬Í¨¹ý¸ÃÀ¹½ØÆ÷ʵʩ»·ÈÆÇÐÃæ¡£¸ÃÀ¹½ØÆ÷ʹÓÃServlet¹ýÂËÆ÷ʵÏÖAOPÇÐÃæ£¬Ëü±¾Éí¾ÍÊÇÒ»¸öServlet¹ýÂËÆ÷£»
  • MethodSecurityInterceptor£ºµ±µ÷ÓÃÒµÎñÀà·½·¨µÄ°²È«¶ÔÏóʱ£¬¿Éͨ¹ý¸ÃÀ¹½ØÆ÷Ààʵʩ»·ÈÆÇÐÃæ£»
  • AspectJSecurityInterceptor£ººÍMethodSecurityInterceptorÀàËÆ£¬ËüÊÇÕë¶ÔÒµÎñÀà·½·¨µÄÀ¹½ØÆ÷£¬Ö»²»¹ýËüͨ¹ýAspectJʵʩAOPÇÐÃæ¡£

    Acegi°æ±¾Éý¼¶µÄÒ»Ð©ÖØ´ó±ä»¯

    ?

    AcegiÏîÄ¿¿ªÊ¼ÓÚ2003Ä꣬AcegiÍŶÓÔÚ·¢²¼Ð°汾ʱ·Ç³£½÷É÷£¬ÔÚ±¾Êéд×÷֮ʱ£¬Acegi×îа汾Ϊ1.0.3¡£ÔÚ´Ë֮ǰAcegiÒѾ­·¢²¼ÁË10¶à¸öÔ¤ÀÀ°æ±¾£¬ÓÉÓÚAcegi¿ò¼ÜÓÅÒìµÄ±íÏÖ£¬Ðí¶à´óÐÍÓ¦ÓÃÔçÔÚAcegi 1.0Õýʽ°æ±¾·¢²¼Ö®Ç°£¨2006Äê5Ô£©£¬¾ÍÒѾ­²ÉÓÃAcegi¿ò¼Ü×÷ΪÆä°²È«·ÃÎÊ¿ØÖƵĽâ¾ö·½°¸¡£

    ÔÚAcegiÉçÇøÀÀ´×ÔÊÀ½ç¸÷µØÖÚ¶àÓÅÐãµÄ°²È«ÁìÓòר¼Ò¶ÔAcegiµÄ¸Ä½øºÍ·¢Õ¹Ï×¼ÆÏײߣ¬AcegiÍŶӹ㷺ÌýÈ¡²¢ÎüÊÕ¸÷ÖÖÓÐÒæµÄ½¨Ò飬½«ËüÃÇÈÚÈëµ½AcegiµÄ¿ò¼ÜÖУ¬Ê¹Acegi³ÉΪ¹¹½¨ÔÚSpring»ù´¡ÉÏÆóÒµÓ¦ÓõÄÊ×Ñ¡°²È«¿ØÖÆ¿ò¼Ü¡£

    Acegi 1.0.3°æ±¾Ïà±ÈÓÚÔçÆÚÔ¤ÀÀ°æ±¾·¢ÉúÁ˺ܴóµÄ±ä»¯£¬¶ÔÓÚÐèÒª½øÐÐAcegi°æ±¾µÄÏîÄ¿À´Ëµ£¬Á˽âÕâÒ»±ä»¯ÌرðÖØÒª¡£ÏÂÃæ£¬ÎÒÃÇÁгöAcegiµÄÒ»Ð©ÖØ´óµÄÉý¼¶¸üУº

  • °üÃûµÄ¸üУºÔÚ0.9.0¼°Ö®Ç°µÄ°æ±¾ÖУ¬Acegi²ÉÓÃnet.sf.acegisecurity°üÃûǰ׺£¬ÔÚ1.0.0°æ±¾Ö®ºó¸ü¸ÄΪorg.acegisecurity£¨HibernateÒ²×ß¹ýÏàͬµÄµÀ·£¬ºÃÔÚAcegiÔÚÕýʽ°æ±¾·¢²¼Ö®Ê±¾ÍÍê³ÉÁËÕâÖÖת±ä£©£»
  • ACLÄ£¿éµÄµ÷Õû£ºACLÄ£¿é·¢ÉúÁËÖØ´óµÄµ÷Õû£¬AcegiÍŶӽÓÊÕÁËÉçÇø´óÁ¿¹ØÓÚACLÄ£¿éµÄ·´À¡Òâ¼û£¬ÖØÐÂÉè¼ÆÁËACLÄ£¿éµÄµ×²ã½á¹¹£¬ÔÚÐÔÄÜ¡¢·â×°ÐÔ¡¢Áé»îÐÔÉϵõ½ÁËÖʵÄÌáÉý¡£ÊÂʵÉÏ£¬AcegiʹÓÃorg.acegisecurity.acls°ü´úÌæÁËÔ­À´µÄorg.acegisecurity.acl°ü£¬ºóÕß½«ÔÚºóÆÚµÄ°æ±¾ÖÐɾ³ý£¬ÓÉÓÚÕâÖÖÉ˽¹ÇµÄ±ä»¯£¬½«ºÜÄѼæÈÝÔ­À´ACLÄ£¿é¡£²»¹ý£¬Ä¿Ç°»ùÓÚпò¼ÜµÄACLÄ£¿é»¹Ã»ÓнøÐгä·ÖµÄ²âÊÔ£¬Acegi³ÐŵÔÚ1.1.0°æ±¾·¢²¼Ê±Ìṩ×îÖÕµÄʵÏÖ£»
  • ɾ³ýÁËContextHolder¼°ÆäÏà¹ØÀࣺÔÚAcegi 0.9°æ±¾ÖУ¬ContextHolder¼°ÆäÏà¹ØÀà±»³¹µ×´ÓAcegiÏîÄ¿ÖÐɾ³ý¡£ContextHolder¿ÉÒÔÔÚ¶à¸öHTTPÇëÇóÖй²Ïíͬһ¸öThreadLocal£¬ÕâºÍSpringÌᳫµÄThreadLocalÖ»Ó¦ÔÚͬһÏß³ÌÖй²ÏíÏà㣡£ÏÖÔÚ£¬AcegiʹÓÃSecurityContextHolderÌæ»»ContextHolder£¬ËüµÄÉúÃüÖÜÆÚÊÇÒ»¸öHTTP ÇëÇó£»
  • ʹÓÃFilterChainProxyͬʱ´úÀí¶à¸ö¹ýÂËÆ÷£ºÔÚÔçÆÚµÄ°æ±¾ÖУ¬Acegiͨ¹ýFilterToBeanProxy½«web.xmlÖеÄServlet¹ýÂËÆ÷¶¨Òå×ªÒÆµ½SpringÈÝÆ÷ÖС£Õâ±ÈÖ±½ÓÔÚweb.xmlÖÐÅäÖÃServlet¹ýÂËÆ÷Òª·½±ãһЩ£¬µ«ÊÇAcegi¿ò¼ÜÍùÍùÐèÒª¶¨Òå¶à¸öServlet¹ýÂËÆ÷£¬Ê¹web.xmlÅäÖÃÎļþ±äµÃÈß³¤ÄÑ¿´¡£ÔÚAcegi 0.8°æ±¾ÖÐÌṩFilterChainProxy£¬Ëü¿ÉÒÔͬʱ´úÀí¶à¸öServlet¹ýÂËÆ÷²¢±£Ö¤¹ýÂËÆ÷µÄ˳Ðò¡£Òò´ËÔÚа汾ÖУ¬FilterChainProxy³ÉÎªÍÆ¼öµÄÑ¡
  • Ôñ¡£PS£º±¾ÎÄÖ÷ÒªÕª×Ô¡¶¾«Í¨Spring 2.x ——ÆóÒµÓ¦Óÿª·¢Ïê½â¡·£¬ ͼƬÀ´Ô´ÓÚÍøÉÏ¡£

  • ¶ÁÊéÈËÍø >Èí¼þ¼Ü¹¹Éè¼Æ

    ÈȵãÍÆ¼ö