Java Spring安全测试期间的空身份验证

Java Spring安全测试期间的空身份验证,java,spring,spring-security,spring-test-mvc,Java,Spring,Spring Security,Spring Test Mvc,我想集成测试一个Spring安全认证。只要登录有效。但在测试过程中出现了以下错误: java.lang.AssertionError: Authentication should not be null 我的自定义UserDetails服务只是从数据库中获取用户并将其映射到我的自定义UserDetails。我做错了什么?这是我还有的: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(类={Application.cla

我想集成测试一个Spring安全认证。只要登录有效。但在测试过程中出现了以下错误:

java.lang.AssertionError: Authentication should not be null
我的自定义UserDetails服务只是从数据库中获取用户并将其映射到我的自定义UserDetails。我做错了什么?这是我还有的:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(类={Application.class})
@WebAppConfiguration
公共类SecurityConfigTest{
@自动连线
私有WebApplicationContext上下文;
私有MockMvc-MockMvc;
@以前
public void setUp()引发异常{
mockMvc=MockMvcBuilders
.webAppContextSetup(上下文)
.apply(springSecurity())
.build();
}
@试验
public void shouldAuthenticate()引发异常{
模拟MVC
.perform(formLogin())
.andExpect(已验证());
}
}
@配置
@启用Web安全性
公共类SecurityConfig扩展了WebSecurity配置适配器{
@自动连线
用户详细信息服务用户详细信息服务;
@凌驾
public void configure(AuthenticationManagerBuilder auth)引发异常{
认证
.userDetailsService(userDetailsService)
.passwordEncoder(新的BCryptPasswordEncoder());
}
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.httpBasic()
.及()
.授权请求()
.antMatchers(“/”,“/login”).permitAll()
.及()
.csrf().disable();
}
}
@配置
@启用自动配置
@组件扫描
公共类应用程序扩展了SpringBootServletInitializer{
@凌驾
受保护的SpringApplicationBuilder配置(SpringApplicationBuilder应用程序){
返回应用程序.sources(application.class);
}
公共静态void main(字符串[]args){
SpringApplication.run(Application.class,args);
}
}
如,
mockMvc.perform(formLogin())
中所述:

将使用用户名“user”、密码“password”和有效的CSRF令牌向“/login”提交帖子

因此,如果您的登录URL不是
/login
,用户名不是
用户
,或者密码不是
密码
,您不应该期望它工作

要为数据库中实际存在的用户提供用户名/密码组合,您应该能够使用
mockMvc.perform(formLogin(/auth”).user(“admin”).pass(“pass”)
(假设登录URL为
/auth
,用户名为
admin
,密码为
pass


查看参考手册了解更多详细信息和示例。

我以前尝试过inMemoryAuthentication(使用用户、密码…)和相同的问题。我还认为SpringSecurity会自动处理登录POST请求。如果不是,那么控制器应该是什么样子?非常感谢您的帮助!我把它整理好了。我应该在formLogin.loginPage()中指定它。