9

我正在尝试为 REST 端点提供安全性。我正在按照此页面的说明进行操作。在我的情况下,我没有视图,因此我没有创建控制器来指定视图,也没有在我的 AppConfig.java 中添加 viewResolver

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

4

1 回答 1

6

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

<form-login 
        login-page="/login" 
        default-target-url="/welcome" 
        authentication-failure-url="/login?error" 
        username-parameter="username"
        password-parameter="password" />

只需将其更改为空http-basic标签:

<http-basic />

如果您没有更改任何其他内容,那么它应该可以完美运行。您还可以通过尝试访问您的页面从浏览器测试您的设置。如果您正确配置了所有内容,这次您将得到一个弹出窗口,而不是表单。这将是欢迎您的基于 HTTP 的身份验证。

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

  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();
于 2015-12-15T21:58:09.663 回答