package cc.mrbird.febs.common.security.starter.configure; import cc.mrbird.febs.common.core.entity.constant.EndpointConstant; import cc.mrbird.febs.common.core.entity.constant.StringConstant; import cc.mrbird.febs.common.security.starter.handler.FebsAccessDeniedHandler; import cc.mrbird.febs.common.security.starter.handler.FebsAuthExceptionEntryPoint; import cc.mrbird.febs.common.security.starter.properties.FebsCloudSecurityProperties; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter; import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer; /** * @author MrBird */ @EnableResourceServer @EnableAutoConfiguration(exclude = UserDetailsServiceAutoConfiguration.class) public class FebsCloudResourceServerConfigure extends ResourceServerConfigurerAdapter { private FebsCloudSecurityProperties properties; private FebsAccessDeniedHandler accessDeniedHandler; private FebsAuthExceptionEntryPoint exceptionEntryPoint; @Autowired(required = false) public void setProperties(FebsCloudSecurityProperties properties) { this.properties = properties; } @Autowired(required = false) public void setAccessDeniedHandler(FebsAccessDeniedHandler accessDeniedHandler) { this.accessDeniedHandler = accessDeniedHandler; } @Autowired(required = false) public void setExceptionEntryPoint(FebsAuthExceptionEntryPoint exceptionEntryPoint) { this.exceptionEntryPoint = exceptionEntryPoint; } @Override public void configure(HttpSecurity http) throws Exception { if (properties == null) { premitAll(http); return; } String[] anonUrls = StringUtils.splitByWholeSeparatorPreserveAllTokens(properties.getAnonUris(), StringConstant.COMMA); if (ArrayUtils.isEmpty(anonUrls)) { anonUrls = new String[]{}; } if (ArrayUtils.contains(anonUrls, EndpointConstant.ALL)) { premitAll(http); return; } http.csrf().disable() .requestMatchers().antMatchers(properties.getAuthUri()) .and() .authorizeRequests() .antMatchers(anonUrls).permitAll() .antMatchers(properties.getAuthUri()).authenticated() .and() .httpBasic(); } @Override public void configure(ResourceServerSecurityConfigurer resources) { if (exceptionEntryPoint != null) { resources.authenticationEntryPoint(exceptionEntryPoint); } if (accessDeniedHandler != null) { resources.accessDeniedHandler(accessDeniedHandler); } } private void premitAll(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests().anyRequest().permitAll(); } }