Spring security 使用spring安全性保护REST端点

Spring security 使用spring安全性保护REST端点,spring-security,authorization,restful-authentication,ws-security,rest-security,Spring Security,Authorization,Restful Authentication,Ws Security,Rest Security,我试图为REST端点提供安全性。我是按照你的指示去做的。在我的例子中,我没有视图,因此我没有创建控制器来指定视图,也没有在AppConfig.java中添加viewResolver 实现后,它会在调用安全REST端点时正确显示拒绝访问错误。但是,即使我在请求头中指定用户名/密码,我也会收到拒绝访问错误。我正在测试邮递员在基本身份验证中设置用户名/密码。我什么都不知道?您遵循的示例是实现基于表单的身份验证。要将其更改为http auth(更适合REST服务),您需要在security.xml中查找

我试图为REST端点提供安全性。我是按照你的指示去做的。在我的例子中,我没有视图,因此我没有创建控制器来指定视图,也没有在AppConfig.java中添加viewResolver


实现后,它会在调用安全REST端点时正确显示拒绝访问错误。但是,即使我在请求头中指定用户名/密码,我也会收到拒绝访问错误。我正在测试邮递员在基本身份验证中设置用户名/密码。我什么都不知道?

您遵循的示例是实现基于表单的身份验证。要将其更改为
http auth
(更适合REST服务),您需要在security.xml中查找以下
表单登录
标记:

<form-login 
        login-page="/login" 
        default-target-url="/welcome" 
        authentication-failure-url="/login?error" 
        username-parameter="username"
        password-parameter="password" />
如果你没有改变其他任何东西,那么它应该工作得很好。您还可以通过尝试访问页面,从浏览器测试设置。如果您正确配置了所有内容,那么这次您将得到一个弹出窗口,而不是一个表单。这将是HTTP基本身份验证,欢迎您

由于您可能正在使用基于Java的配置,因此此更改的等效内容将是替换:

  http.authorizeRequests()
    .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
    .antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
    .and().formLogin();
与:


您可以先发布失败请求的调试日志和您提交的HTTP请求。您可以发布部分代码吗?@Milkyway出于安全原因,我不愿意发布代码,但出于测试目的,可以从我提到的链接使用代码,在那篇文章中,必须忽略与UI相关的代码。虽然您的答案是正确的,但告诉他将SecurityConfig.java文件中的.formLogin()替换为.httpBasic(),可能会更有帮助,因为他使用的是JavaConfig,而不是xml-s。您是对的。我想这是很明显的补充,但为了清楚起见,我把它放在那里了。你好。我怎么能在spring boot里做同样的事情呢,因为我没有任何配置文件。只使用注释。你能告诉我在spring boot中该怎么做吗?请参考问题-
  http.authorizeRequests()
    .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
    .antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
    .and().formLogin();
  http.authorizeRequests()
    .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
    .antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
    .and().httpBasic();