gpt4 book ai didi

spring-security - 运行 JUnit 测试时,Spring Security 不调用我的自定义身份验证过滤器

转载 作者:行者123 更新时间:2023-12-04 07:36:25 24 4
gpt4 key购买 nike

我正在尝试按照此 article 使用 Spring Security 实现自定义无状态身份验证

我面临的问题是框架没有调用我的自定义过滤器,即使我的 SecurityConfig 看起来与上一个链接几乎相同(稍微简单一点):

@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
@Qualifier("appAuthenticationProvider")
private AuthenticationProvider authenticationProvider;

@Autowired
@Qualifier("appAuthenticationFilter")
private AppAuthenticationFilter appAuthenticationFilter;

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable().
sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests().anyRequest().authenticated()
.and()
.anonymous().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedEntryPoint());

http.addFilterBefore(appAuthenticationFilter, BasicAuthenticationFilter.class);
}

@Bean
public AuthenticationEntryPoint unauthorizedEntryPoint() {
return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
}

我没有发布 authenticationProvider 和 appAuthenticationFilter 的代码,因为前者工作正常(我可以使用/login 端点登录)而后者只是实现了 通用过滤器Bean 甚至没有被调用。

任何帮助将非常感激!

最佳答案

好的,我发现在部署 Spring Boot 应用程序时正在执行过滤器,并且仅在运行测试时才调用它们后,我找到了解决方案。然后我找到了这个帖子:

https://spring.io/blog/2014/05/23/preview-spring-security-test-web-security

我忘记配置我的模拟 MVC 以使用过滤器。所以最后我的身份验证测试类如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = GasApplication.class)
@WebAppConfiguration
public class LoginControllerTest {

@Autowired
private WebApplicationContext context;

@Autowired
@Qualifier("appAuthenticationFilter")
private Filter appAuthenticationFilter;

private MockMvc mockMvc;

@Before
public void init() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.addFilter(appAuthenticationFilter, "/resource")
.build();
}

// Tests here...
}

关于spring-security - 运行 JUnit 测试时,Spring Security 不调用我的自定义身份验证过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30478876/

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