SpringBoot 获取httpsecuity配置中的放行的所有url和method
可以通过注入 org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration 类并调用其 getHttpSecurity 方法来获取 HttpSecurity 对象,然后通过该对象的 authorizeRequests() 方法获取到所有的放行的 URL 和 HTTP 方法。
示例代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
import java.util.HashMap;
import java.util.Map;
public class HttpSecurityConfig {
@Autowired
private WebSecurityConfiguration webSecurityConfiguration;
public Map<String, String> getAllowedUrls() {
HttpSecurity httpSecurity = webSecurityConfiguration.getHttpSecurity();
ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
Map<String, String> allowedUrls = new HashMap<>();
registry.getRegistry().stream()
.filter(config -> !config.getAttributes().isEmpty())
.forEach(config -> {
String url = config.getAntMatcher().getPattern();
String method = config.getMethods().stream().findFirst().orElse("");
String roles = config.getAttributes().entrySet().stream()
.filter(entry -> "hasRole".equals(entry.getKey()))
.map(Map.Entry::getValue)
.findFirst().orElse("");
allowedUrls.put(url, method + " " + roles);
});
return allowedUrls;
}
}
在上述代码中,我们注入了 WebSecurityConfiguration 类,并调用其 getHttpSecurity 方法获取 HttpSecurity 对象。然后通过 authorizeRequests() 方法获取到所有的放行 URL 和 HTTP 方法,并将它们存储在一个 Map 对象中返回。在遍历 ExpressionInterceptUrlRegistry 对象时,我们从每个配置中获取 URL、HTTP 方法和所需角色,并将它们组合在一起放入 Map 对象中。
原文地址: https://www.cveoy.top/t/topic/bHVV 著作权归作者所有。请勿转载和采集!