当前位置: 首页 > 知识库问答 >
问题:

Spring安全测试返回401(未经授权)

郭弘盛
2023-03-14

在这个留档Spring Security MVC Test中描述了如何使用Spring Security测试安全的ressource。我遵循了提供的所有步骤,但访问受保护的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()
}

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

共有1个答案

宁良平
2023-03-14

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

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

 类似资料:
  • 所以,我试图用Tweepy喜欢一个推文,但是这个错误正在发生: 有什么想法吗?

  • 我正在使用postman,并尝试通过http://localhost:8180/auth/admin/realms/demo/users/{userID}更新用户的配置文件,但收到响应。 通过http://localhost:8180/auth/admin/realms/demo/users/{userID}发送带有Json内容类型和用户信息的Put请求。 不幸的是,我已经连续收到了401个回复。

  • 我正在使用Spring进行MVC测试 这是我的测试课 这里是MVC配置 这是安全配置 当我运行测试时,测试失败,并显示以下消息: 我知道它失败是因为url受到Spring Security性的保护,但当我运行应用程序时,即使没有经过身份验证,我也可以访问该url。 我做错什么了吗?

  • 我正在Spring Boot中开发rest API。我能够进行CRUD操作并且邮递员给出正确的响应,但是当我添加Spring Security用户名和密码时,邮递员给出了401未经授权。 我提供了spring boot安全用户名和密码,如下所示。 应用道具 我已经完成了基本的身份验证,用户名是root,密码是root。预览请求提供成功更新的标题消息: 编辑我已经删除了邮递员中的cookie,但仍然

  • 我没有使用Spring Security性,但它要求我进行身份验证。 URL例外(http://localhost:8080/SpringJob/ExecuteJob): application-dev.xml build.gradle片段 控制器

  • 我按照这里的教程尝试开始使用spring OAuth。但是,没有页面返回未经授权的401,即使我没有通过服务器验证(本教程中的配置示例应该禁用匿名访问。本教程中与此问题相关的唯一注释只有一个响应,即授权尚未启用,但我在其中一个配置类上有。 所有配置类 应用: “安全”: 可能不相关,但也有: 在通读了教程的完整源代码后,我添加了 最后,这个项目的,因为我在使用Spring时经常遇到特定版本依赖关系