package com.beautifulsoup.chengfeng.security.configurer; import com.beautifulsoup.chengfeng.filter.TokenAuthenticationFilter; import com.beautifulsoup.chengfeng.handler.TokenRefreshFailureHandler; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.web.HttpSecurityBuilder; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.logout.LogoutFilter; public class TokenLoginConfigurer<T extends TokenLoginConfigurer<T, B>, B extends HttpSecurityBuilder<B>> extends AbstractHttpConfigurer<T, B> { private TokenAuthenticationFilter authFilter; public TokenLoginConfigurer() { this.authFilter = new TokenAuthenticationFilter(); } @Override public void configure(B http) throws Exception { authFilter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class)); authFilter.setAuthenticationFailureHandler(new TokenRefreshFailureHandler()); TokenAuthenticationFilter filter = postProcess(authFilter); http.addFilterBefore(filter, LogoutFilter.class); } public TokenLoginConfigurer<T, B> permissiveRequestUrls(String ... urls){ authFilter.setPermissiveUrl(urls); return this; } public TokenLoginConfigurer<T, B> tokenValidSuccessHandler(AuthenticationSuccessHandler successHandler){ authFilter.setAuthenticationSuccessHandler(successHandler); return this; } }