gpt4 book ai didi

java - 我如何确定使用 Spring Security 访问 URL 需要哪些角色?

转载 作者:搜寻专家 更新时间:2023-10-31 20:07:55 27 4
gpt4 key购买 nike

我正在使用 Spring Security 来保护 Web 应用程序。这些 URL 是这样保护的:

<security:http entry-point-ref="authenticationEntryPoint">
<security:intercept-url pattern="/" access="ROLE_ANONYMOUS" />
<security:intercept-url pattern="/assets/**/*" access="ROLE_ANONYMOUS" />
...
<security:intercept-url pattern="/**" access="ROLE_USER" />
<security:anonymous granted-authority="ROLE_ANONYMOUS" />
</security:http>

我有一个过滤器,在某些情况下需要将用户重定向到一个特殊页面。但是,该页面需要 Assets 目录中的图像和 CSS 文件,不幸的是,这些文件也将被重定向到该特殊页面。我不希望过滤器手动检查每个 URL 模式,因为我的实际 URL 配置要长得多,而且我还想允许其他页面。

有没有办法从给定页面的过滤器中确定需要哪些角色?如果不需要 ROLE_ANONYMOUS,我可以选择不重定向。

最佳答案

假设您使用的是 Spring Security 3,该信息的来源(为特定路径配置了哪些属性/角色)是注入(inject) FilterSecurityInterceptor 的 FilterInvocationSecurityMetadataSource。因此,如果您有特定的 URL,则可以通过将 FilterInvocation(根据请求和响应创建)传递给 FilterInvocationSecurityMetadataSource 的 getAttributes() 方法来查询配置的属性。

获取对命名空间创建的内部 bean 的引用可能有点棘手。假设您有自己的 bean(或多个 bean)来进行调用,您可以通过将 BeanPostProcessor 添加到您的应用程序上下文来将其注入(inject)到它们中,其实现方式如下:

public class FilterSecurityMDSExtractor implements BeanPostProcessor, BeanFactoryAware {
private ConfigurableListableBeanFactory bf;

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof FilterInvocationSecurityMetadataSource) {
// Get your own bean from the BeanFactory here and inject the SecurityMetadataSource into it
}
return bean;
}

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}

public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.bf = (ConfigurableListableBeanFactory)beanFactory;
}
}

请注意,Spring Security 会自动在上下文中注册一个 WebInvocationPrivilegeEvaluator,它可用于检查用户是否能够调用特定 URL 而无需实际调用它。这是相似的,因为它查询 SecurityMetadataSource,但不是您在这里所追求的。

关于java - 我如何确定使用 Spring Security 访问 URL 需要哪些角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/453925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com