使用 spring 安全性保护 REST 端点
Securing REST endpoint using spring security
我正在尝试为 REST 端点提供安全性。我正在按照 this page 的说明进行操作。在我的例子中,我没有视图,因此我没有创建控制器来指定视图,也没有在我的 AppConfig.java
中添加 viewResolver
实施后,它在调用安全 REST 端点时正确显示拒绝访问错误。但是,即使我在请求 header 中指定了 username/password,我也会收到访问被拒绝的错误。我正在 Basic Auth 中的邮递员设置 username/password 中进行测试。我错过了什么?
您遵循的示例是实现基于表单的身份验证。 为了将其更改为 http auth
(更适合 REST 服务),您需要在您的 security.xml:
中查找以下 form-login
标签
<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();
我正在尝试为 REST 端点提供安全性。我正在按照 this page 的说明进行操作。在我的例子中,我没有视图,因此我没有创建控制器来指定视图,也没有在我的 AppConfig.java
中添加 viewResolver实施后,它在调用安全 REST 端点时正确显示拒绝访问错误。但是,即使我在请求 header 中指定了 username/password,我也会收到访问被拒绝的错误。我正在 Basic Auth 中的邮递员设置 username/password 中进行测试。我错过了什么?
您遵循的示例是实现基于表单的身份验证。 为了将其更改为 http auth
(更适合 REST 服务),您需要在您的 security.xml:
form-login
标签
<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();