gpt4 book ai didi

spring - Spring Security 的自定义访问规则

转载 作者:行者123 更新时间:2023-12-02 02:19:31 24 4
gpt4 key购买 nike

通常,您定义一些拦截 URL 模式来配置对具有 Spring Security 的页面的访问

<http use-expressions="true">
<intercept-url pattern="/**/secure/**" access="hasRole('ROLE_SECURE_USER')" />
...
</http>

我们现在有一些带有事先未知的 URL 的页面。但是我们可以编写一段代码来决定某个特定页面是否应该受到保护,即我们可以提供一个服务,如果该页面必须受到保护,则返回true。所以我们想做的是这样的:

<http use-expressions="true">
<intercept decide="@service.mustProtect()" access="hasRole('ROLE_SECURE_USER')" />
...
</http>

如何使用 Spring 来实现这一点?我们必须编写自定义过滤器吗?您将如何实现这样的过滤器?

最佳答案

实际上,通过在FilterSecurityInterceptor之前注入(inject)自定义过滤器来解决我们的问题非常容易。然后,您可以在过滤器的 doFilter 方法中抛出 AccessDeniedException 来触发身份验证。

Spring 安全配置:

<http use-expressions="true">
<custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="accessFilter"/>
...
</http>

<beans:bean id="accessFilter" class="xyz.AccessFilter" />

过滤器:

public class AccessFilter extends GenericFilterBean {

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (!currentUserCanAccessPage(request)) {
throw new AccessDeniedException();
}
chain.doFilter(request,response)
}

private boolean currentUserCanAccessPage(ServletRequest request) {
//implement
}
}

关于spring - Spring Security 的自定义访问规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18353994/

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