【发布时间】:2020-09-15 19:49:00
【问题描述】:
使用 Spring Security,您可以拥有每个人都可以访问的公共 api 端点以及需要在获得响应之前进行身份验证的端点。在我的应用程序中,用户通过 jwt 令牌进行身份验证。对于现在登录的用户,始终检查令牌,无论公共 api 端点是否收到请求。
我想知道如何检查当前端点是公共端点还是经过身份验证的端点,这样我可以更改代码,以便仅在端点需要身份验证时进行令牌检查。
我可以在哈希集中添加所有公共端点并将当前请求端点与公共端点进行比较,但这效率不高,而且一些公共端点包含通配符 (**),因此比较有点很麻烦。
这是我能找到的唯一信息:
Spring Security - check if web url is secure / protected
但它是关于 JSP 的。
我也无法从SecurityContextHolder.getContext() 获取请求信息。我的猜测是我应该从org.springframework.security.config.annotation.web.builders.HttpSecurity 获取信息,因为这是用于定义哪些端点不需要身份验证的同一类。 (使用 anthMatchers().permitall())。但我不知道调用哪个方法,我不确定 HttpSecurity 是否可以自动装配到另一个类中。谁能指点一下?
谢谢
【问题讨论】:
-
忽略未认证的端点不是更好吗?喜欢在
configure(WebSecurity web)中使用web.ignoring().antMatchers吗? -
我刚刚尝试过,但没有帮助,而且它会使一些过滤器被调用两次。
-
如果您的过滤器带有
@Bean注释,它将被调用两次。它被插入到弹簧上下文中。 -
没有用@WebFilter 注释
标签: spring-boot spring-security jwt