Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧安全测试返回401(未经授权)_Java_Spring_Security_Spring Mvc_Spring Security - Fatal编程技术网

Java 弹簧安全测试返回401(未经授权)

Java 弹簧安全测试返回401(未经授权),java,spring,security,spring-mvc,spring-security,Java,Spring,Security,Spring Mvc,Spring Security,本文档描述了如何使用Spring Security测试安全的资源。我遵循了提供的所有步骤,但访问受保护的ressource仍会返回错误代码401(未经授权) 这是我的测试课 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @WebAppConfiguration @SpringBootTest @TestPropertySource(locations = "classpath:test.properties") pub

本文档描述了如何使用Spring Security测试安全的资源。我遵循了提供的所有步骤,但访问受保护的ressource仍会返回错误代码401(未经授权)

这是我的测试课

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SpringBootTest
@TestPropertySource(locations = "classpath:test.properties")
public class UserControllerTest {
    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setup() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
            .defaultRequest(
                    get("/api/users/1")
                            .with(user("test@test.com").password("test"))
                            .with(httpBasic("sc68", "adminpass"))
            )
            .apply(springSecurity())
            .build();
    }

    @Test
    public void testUnprotectedResource() throws Exception {
        mockMvc.perform(get("/api/articles"))
                .andExpect(status().isOk());
    }

    @Test
    public void testProtectedResource() throws Exception {
        mockMvc.perform(get("/api/users/1"))
                .andExpect(status().isOk());
    }
}
我的资源服务器配置:

@Throws(Exception::class)
    override fun configure(http: HttpSecurity) {
        http.authorizeRequests()
                .antMatchers("/api/users/register").permitAll()
                .antMatchers("/api/articles").permitAll()
                .anyRequest().authenticated().and()
                        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and(    )
            .csrf().disable()
}

如果你想看看整个项目,你可以找到它。我已经尝试了不同的测试运行程序和教程中描述的所有内容,但我找不到一个解决方案,即如何在测试期间获得经过身份验证的用户。

我认为您不应该同时拥有
user()
httpBasic()
user()
用于基于表单的身份验证,并将使用UsernamePasswordAuthenticationToken创建SecurityContext
httpBasic
将在base64编码的身份验证标头中创建一个


您的安全配置似乎缺少
httpBasic()
配置,在我看来似乎没有配置安全机制,只有一些匹配器。您可以看到一个示例

我在AuthorizationServerConfigurerAdapter中拥有基本身份验证。通过我的Angular应用程序,我可以通过以下URL接收AccessToken:“