使用spring安全性保护REST端点

Kai*_*har 9 ws-security authorization restful-authentication spring-security rest-security

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

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

Ger*_*cso 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" />
Run Code Online (Sandbox Code Playgroud)

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

<http-basic />
Run Code Online (Sandbox Code Playgroud)

如果你没有改变任何其他东西,那么它应该是完美的.您还可以尝试访问自己的页面,从浏览器测试设置.如果您正确配置了所有内容,则此时会弹出一个弹出窗口,而不是表单.这将是HTTP基本认证,欢迎您.

由于您可能正在使用基于Java的配置,因此相应的此更改将替换为:

  http.authorizeRequests()
    .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
    .antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
    .and().formLogin();
Run Code Online (Sandbox Code Playgroud)

有:

  http.authorizeRequests()
    .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
    .antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
    .and().httpBasic();
Run Code Online (Sandbox Code Playgroud)