Getting Not Found 访问受保护 Spring 启动资源失败
Getting Not Found failures accessing protected Spring Boot resources
我有一个小测试 Spring 引导应用程序包括一个包含简单服务的控制器。该服务只是使浏览器显示一些HTML的测试服务,如下图:
@RestController
public class TestController
{
@GetMapping("/testserv")
public String getUserInformation()
{
return("<p>User authenticated!</p>");
}
}
我还有一个配置 class 旨在要求用户进行身份验证才能访问该服务。目的是使应用程序中的所有其他服务无需登录即可访问,而访问 /testserv 需要登录:
@Configuration
@EnableWebSecurity
public class TestSecure extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity httpSecure) throws Exception
{
httpSecure.authorizeRequests()
.antMatchers("/testserv").authenticated()
.anyRequest().permitAll();
}
}
如果我 运行 我的应用程序没有 TestSecure class,我可以毫无问题地访问 /testserv 服务。但是,当我输入 TestSecure class 时,我在尝试访问该服务时遇到 404 Not Found 失败。
我做了更多测试。我发现似乎导致 Not Found 失败的原因是:
.antMatchers("/testserv").authenticated()
如果我注释掉该行,我就可以访问/testserv。在那一行之后,应用程序突然找不到 /testserv 服务并生成 404 Not Found 故障。
我相信我已经完成了所有必要的工作,但也许我遗漏了什么?谁能告诉我为什么使用 antMatchers() 会导致找不到服务?我怎样才能正确访问此服务?
问题是您缺少 @RequestMapping
控制器。我认为只需添加该注释就可以使您的代码正常工作。
根据 OP 评论更新
您还应该使用 .formLogin()
以显示登录表单
我有一个小测试 Spring 引导应用程序包括一个包含简单服务的控制器。该服务只是使浏览器显示一些HTML的测试服务,如下图:
@RestController
public class TestController
{
@GetMapping("/testserv")
public String getUserInformation()
{
return("<p>User authenticated!</p>");
}
}
我还有一个配置 class 旨在要求用户进行身份验证才能访问该服务。目的是使应用程序中的所有其他服务无需登录即可访问,而访问 /testserv 需要登录:
@Configuration
@EnableWebSecurity
public class TestSecure extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity httpSecure) throws Exception
{
httpSecure.authorizeRequests()
.antMatchers("/testserv").authenticated()
.anyRequest().permitAll();
}
}
如果我 运行 我的应用程序没有 TestSecure class,我可以毫无问题地访问 /testserv 服务。但是,当我输入 TestSecure class 时,我在尝试访问该服务时遇到 404 Not Found 失败。
我做了更多测试。我发现似乎导致 Not Found 失败的原因是:
.antMatchers("/testserv").authenticated()
如果我注释掉该行,我就可以访问/testserv。在那一行之后,应用程序突然找不到 /testserv 服务并生成 404 Not Found 故障。
我相信我已经完成了所有必要的工作,但也许我遗漏了什么?谁能告诉我为什么使用 antMatchers() 会导致找不到服务?我怎样才能正确访问此服务?
问题是您缺少 @RequestMapping
控制器。我认为只需添加该注释就可以使您的代码正常工作。
根据 OP 评论更新
您还应该使用 .formLogin()
以显示登录表单