She*_*eel 5 java spring spring-security spring-boot spring-security-oauth2
在授权服务器中,由于对客户端 ID 的某些操作,需要添加自定义 BasicAuthenticationFilter。大多数实现与 相同BasicAuthenticationFilter。以下是相同的片段,
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {
...
...
String username = someDecoder(tokens[0]); // Kind of something
...
...
}
Run Code Online (Sandbox Code Playgroud)
我的自定义过滤器放置BasicAuthenticationFilter在过滤器链之前。
http.addFilterBefore(new CustomBasicAuthenticationFilter(authenticationManager(), authenticationEntryPoint()),
BasicAuthenticationFilter.class);
Run Code Online (Sandbox Code Playgroud)
这个自定义过滤器工作得很棒,并且用户也成功通过了身份验证。但由于 BasicAuthenticationFilter 仍然存在于链中,该过滤器也会被执行并尝试再次对用户进行身份验证,但由于未操纵客户端凭据而失败。请参阅BasicAuthenticationFilter-GitHub
因此,要从过滤器链中删除/禁用,请BasicAuthenticationFilter遵循此SOQ,建议使用BeanPostProcessor. 但是在 Spring Boot 过滤器链中使用 bean 名称springSecurityFilterChain和 class注册FilterChainProxy。作为FilterChainProxy-GitHub返回不可修改的SecurityFilterChain. 所以接下来不可能改变FilterChainProxybean。
那么如何实现相同或任何其他方式BasicAuthenticationFilter从 Spring Security 过滤器链中删除/禁用或任何其他过滤器。
使用 Spring Boot 1.5.1 和 Spring Security OAuth2 2.0.12
小智 0
我想你可以使用另一个答案:/sf/answers/1989970811/
---- >>> 这是复制/粘贴(更改过滤器名称)。
默认情况下,Spring Boot 会为应用程序上下文中 尚不存在的
FilterRegistrationBean每个 创建一个。这允许您通过声明您自己的 . 对于您来说,所需的配置如下所示:FilterFilterRegistrationBeanFilterRegistrationBeanFilterBasicAuthenticationFilterRun Code Online (Sandbox Code Playgroud)@Bean public FilterRegistrationBean registration(BasicAuthenticationFilter filter) { FilterRegistrationBean registration = new FilterRegistrationBean(filter); registration.setEnabled(false); return registration; }您可能还对这个 Spring Boot 问题感兴趣 ,其中讨论了如何禁用
Filter和Servletbeans 的自动注册。
| 归档时间: |
|
| 查看次数: |
5043 次 |
| 最近记录: |