我是一个需要端点的用例
/api/v1/resources
应该同时是公开的和私人的。这是什么意思? 如果提供基本身份验证,我想像往常一样执行身份验证,将内容存储在SecurityContextHolder中。
另一方面,如果没有提供身份验证,我也想允许该请求。
我尝试了一大堆重写
@Override
protected void configure(HttpSecurity http) throws Exception {
没有运气。如果我做了
http.authorizeRequests()
.antMatchers("/api/v1/resources").permitAll()
我使用基本身份验证呼叫端点,它显然忽略了,尽管请求仍在继续,但我没有我需要转发到其他服务的身份验证信息。
如果我这样做
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
我得到了那个端点工作并且存储了基本的auth结果,所以我可以转发信息,但是在没有认证的情况下调用它时我得到401.
有没有办法可以将多个规则应用到同一个端点?或类似的东西来实现这个目标?
提前致谢。
修改
现在,我发现实现这一目标的唯一方法是在检查授权标头的整个链之前添加自定义过滤器,如果没有标头,我将请求中的标头注入为attibute(我需要如果标头丢失,请包装请求对象以覆盖getHeader方法以搜索属性,以便我可以在之后检索该标头。)