【发布时间】:2015-07-30 16:07:54
【问题描述】:
我的要求是使用基于 SAML 的 SSO。从 SAML 断言中检索用户组并保护其余 api 端点。我正在使用 Spring 安全 SAML 扩展和 Spring MVC。我采取的步骤是。
- 使用 Spring SAML 扩展为 SP 配置应用程序。 [完成]
- 检索断言并分配角色 [完成]
- 创建休息端点。 [完成]
- 基于角色的安全休息端点和服务。 [不工作]
我已经实现了 SAMLUserDetailsService,它返回一个具有权限的 UserDetails 对象。 'loadUserBySAML' 下面。
@Override
public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
final String userId = credential.getNameID().getValue();
final String emailAddress = credential.getAttributeAsString("EmailAddress");
final String firstName = credential.getAttributeAsString("FirstName");
final String lastName = credential.getAttributeAsString("LastName");
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_STUDENT"));
return new User(userId, emailAddress, firstName, lastName, authorities);
}
我已将<!-- Enable security annotations on methods -->
<security:global-method-security pre-post-annotations="enabled" />添加到securityContext.xml。
在 RestController 和我正在使用 @PreAuthorize 的服务上,但这个注释似乎根本没有效果。
@PreAuthorize("hasRole('ROLE_PROGRAMLEAD')")
@RequestMapping(method = RequestMethod.GET)
public String hello() {
return "Hello.";}
有人可以帮我理解为什么 PreAuthorize 没有触发吗?我是否缺少一些配置?
【问题讨论】:
标签: spring-mvc spring-security spring-saml