1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
   | public class AnonymousAuthenticationFilter extends GenericFilterBean implements       InitializingBean {
         private AuthenticationDetailsSource<HttpServletRequest, ?> authenticationDetailsSource = new WebAuthenticationDetailsSource();             private String key;             private Object principal;             private List<GrantedAuthority> authorities;
         public AnonymousAuthenticationFilter(String key) {       this(key, "anonymousUser", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS"));    } 	        public AnonymousAuthenticationFilter(String key, Object principal,          List<GrantedAuthority> authorities) {       Assert.hasLength(key, "key cannot be null or empty");       Assert.notNull(principal, "Anonymous authentication principal must be set");       Assert.notNull(authorities, "Anonymous authorities must be set");       this.key = key;       this.principal = principal;       this.authorities = authorities;    }
  	    @Override    public void afterPropertiesSet() {       Assert.hasLength(key, "key must have length");       Assert.notNull(principal, "Anonymous authentication principal must be set");       Assert.notNull(authorities, "Anonymous authorities must be set");    }
     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)          throws IOException, ServletException { 	         if (SecurityContextHolder.getContext().getAuthentication() == null) {          SecurityContextHolder.getContext().setAuthentication(                                createAuthentication((HttpServletRequest) req));
           if (logger.isDebugEnabled()) {             logger.debug("Populated SecurityContextHolder with anonymous token: '"                   + SecurityContextHolder.getContext().getAuthentication() + "'");          }       }       else {          if (logger.isDebugEnabled()) {             logger.debug("SecurityContextHolder not populated with anonymous token, as it already contained: '"                   + SecurityContextHolder.getContext().getAuthentication() + "'");          }       }
        chain.doFilter(req, res);    }
     protected Authentication createAuthentication(HttpServletRequest request) {                     AnonymousAuthenticationToken auth = new AnonymousAuthenticationToken(key,             principal, authorities);       auth.setDetails(authenticationDetailsSource.buildDetails(request));
        return auth;    }
     public void setAuthenticationDetailsSource(          AuthenticationDetailsSource<HttpServletRequest, ?> authenticationDetailsSource) {       Assert.notNull(authenticationDetailsSource,             "AuthenticationDetailsSource required");       this.authenticationDetailsSource = authenticationDetailsSource;    }
     public Object getPrincipal() {       return principal;    }
     public List<GrantedAuthority> getAuthorities() {       return authorities;    } }
   |