使用spring安全性保护REST端点

时间:2015-11-30 16:07:30

标签: spring-security authorization restful-authentication ws-security rest-security

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

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

1 个答案:

答案 0 :(得分:6)

您所遵循的示例是实现基于表单的身份验证。为了将其更改为import threading import time def workerA(lock): for i in range(5): lock.acquire_for('A') print('Start A - %s' % i) time.sleep(0.5) print('End A - %s' % i) lock.release_to('B') def workerB(lock): for i in range(5): lock.acquire_for('B') print('Start B - %s' % i) time.sleep(2) print('End B - %s' % i) lock.release_to('A') class LockWithOwner: lock = threading.RLock() owner = 'A' def acquire_for(self, owner): n = 0 while True: self.lock.acquire() if self.owner == owner: break n += 1 self.lock.release() time.sleep(0.001) print('Waited for {} to be the owner {} times'.format(owner, n)) def release_to(self, new_owner): self.owner = new_owner self.lock.release() lock = LockWithOwner() lock.owner = 'A' t1 = threading.Thread(target=workerA, args=(lock, )) t2 = threading.Thread(target=workerB, args=(lock, )) t1.start() t2.start() t1.join() t2.join() print('done') (更适合REST服务),您需要查找以下内容security.xml中的http auth标记:

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基本身份验证。

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

<http-basic />

使用:

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